Screen Builder Interface Version 1.0

COMPASS Version 6.2, 6.3, 6.4 © General Re Corporation 2021 - 2026. All Rights Reserved (created: 2025-05-05 generated: 2026-07-10)

Introduction

COMPASS assesses life insurance applications. For this purpose the application information has to be collected and put into the so-called input-interface of COMPASS. COMPASS supports you in recording application information and presenting the assessment result.

The application information for the assessment can be captured in different ways:

  • Data capturing on your own without COMPASS (DarkMode)

  • Data capturing by COMPASS, displaying COMPASS Java screens (Dialog-Mode)

  • Data capturing via companies’ own screens, based on screen descriptions from COMPASS (Screen Builder mode)

This document describes the structure of the Screen Builder mode.

COMPASS is built using Client/Server architecture: Your client receives a screen description from the COMPASS server, and visualizes it to the customer. Answers to this screen will then be passed back to the COMPASS Server, which will send the next screen description.

Besides a description of the general structure of the communication, you will find everything necessary for building your own screens in this document.

Before considering the Screen Builder mode, you should check with your underwriting department and your partner at Gen Re how you could adapt the user interface of COMPASS in Dialog-Mode. Often the user interface can be adapted to all your requirements with the maintenance program.

For more details of the different integration scenarios refer to the documents „Getting Started“ and „Architecture“.

Also refer to Extranet for COMPASS customers of Gen Re where you will find further documents and resources.

Scenarios for the Screen Builder Mode

The companies’ application forms are implemented within COMPASS: All relevant questions of an application form are placed on a sequence of screens, where one screen includes basically questions related to one object (e.g. a person, a disorder, the occupation).

COMPASS uses the definition of a screen (the so-called screen description) to build a Java Swing screen, which is used by the COMPASS Screen Builder client to capture application information.

A customer-built client can use this screen description to build its own screens, independently from the programming language, operating system or the graphical abilities of the environment; even in a non-graphical environment character-based screens can built that capture the information required by COMPASS. If those screens are always similar or identical, then it is not required for a client to build the screens dynamically from the screen description sent by the COMPASS server, but those screens can be hard-coded and all application data can be recorded based on those persistent screens. This is the Dark mode integration scenario, and is recommended for those situations where the application form is static and does not undergo many modifications, as the integration effort is much less compared with any other integration mode.

Whenever the application form is very dynamic, or when COMPASS runs in POS-mode, static screens are not a viable solution. In these cases it is strongly recommended to go for either the Screen Builder mode or the Dialog mode, what means that the COMPASS server has the control over the sequence of screens, and the information to be captured by each screen. Technically screen descriptions are sent from server to client, and user actions are sent as responses from the client to the server. The difference between these two modes is: in the Dialog mode the client makes use of a COMPASS component that converts the screen description into a Java Swing-screen, and in the Screen Builder mode the client is responsible in creating a visualisation of the screen based on the screen description.

Thus the Screen Builder mode is the most complex form of integration, but also the most powerful and flexible solution:

  • Later modifications of the screen definitions have only to be done with the COMPASS maintenance program, and no programming code is affected

  • Visualised screens are completely customisable by the insurance company: screen properties like colour, fonts, logos, etc can chosen freely; only the relevant questions as specified in the screen description have to appear on the screens

  • The response from the client to the server (a user action) has to contain the answers to the specified questions, but it is irrelevant to COMPASS where these answers come from, e.g. the answers could have been gathered on several screens

Going for the Dialog mode requires a possibility to display Java Swing-screens, what implies the use of Java and the availability of a graphical environment. Here we have to point out that the Java Swing screens can be also customised (colours, fonts, etc), so before deciding for the Screen Builder mode, make sure that the Dialog mode cannot satisfy your requirements.

Please note that in a character-based environment (mainframe, AS/400 etc.) the transfer of a graphical layout, as given by the screen descriptions, is not always easy: Often you will not find any lists that can be extended dynamically (DropDownComboBox) and their number of input elements might be restricted. Other graphical objects can be directly transformed to objects of a character-based environment, e.g. push buttons can be defined as function keys.

Please note that using the Screen Builder mode does not affect the representation of the assessment result: COMPASS can display the results while you are building your own screens to capture the application information.

Visualisation of Own Screens

Building own screens is a task handled mainly by the IT department, so basically the IT developers are addressed by this document. Every screen is defined within the maintenance program, and can be visualised there using the Swing-visualisation of COMPASS. As an own visualisation can be quite different from the COMPASS visualisation, the newly created screen should be presented to the persons responsible for the electronic form of the application form. In many situations the representation of a question and its possible answers can be done using different widgets: e.g.

image 2021 10 01 13 34 16 441

,

image 2021 10 01 13 34 56 084

or

image 2021 10 01 13 35 35 729

Some widgets can be defined within the COMPASS maintenance program, but others not, e.g. check boxes. The clients’ Screen Builder program will have to convert the widgets recommended by COMPASS into widgets that make sure the newly created screens are most likely to be accepted by the agents or customers.

During the development of the Screen Builder communication the client will create responses, which are sent to the server. These responses are in XML-format, and can be verified against the DTD by the COMPASS server (see details in document “COMPASS APIs”, LIGHT_MODE_API). This is a helpful tool during the development stage, but should not be activated in production.

Concepts used in COMPASS

Screen Builder client vs. COMPASS Screen Builder client

COMPASS is built using Client-Server architecture. Only a client can communicate with the server. A client that is used to record/capture data via a communication with the COMPASS server is called a Screen Builder Client. The server will pass screen descriptions, which are visualised by the Screen Builder client, and it expects the answers to those questions as a response from the Screen Builder Client.

When COMPASS runs in Screen Builder mode, this means that a Screen Builder Client is communicating in the above-described way with the COMPASS server. GenRe deploys a Screen Builder Client, which is called in this document COMPASS Screen Builder client. It exists for the communication via RMI or via JMS.

A customer that decides to run in Screen Builder mode will build its own Screen Builder Client. This means the client will build and display screens based on the screen description, evaluate the given answers, and communicate them to the COMPASS Server.

Context / Context Change

COMPASS application information is divided into logically separated areas, which we call contexts. Example for context are application, AP (Assured Person), PH (Policy Holder), Occupation, Pursuit, Disorder, Drug, etc. Each screen, as defined in the maintenance program belongs to exactly one context, what means, that only information from this context can be found on this screen: a screen of context Disorder can only contain questions and answers for one specific disorder.

A certain context can contain sub-contexts, e.g. a screen of context AP can have a sub-screen of context Disorder, what means that the disorder captured is a disorder of the AP.

Speaking technically we can say that a context corresponds to a CaseObject, and every question to a CaseAttribute, where the CaseAttribute belongs to the CaseObject. A CaseObjectRelation represents the relation between a context and its sub-context. These terms and concepts are explained in detail in the document “Input Interface”.

The concept of a context change is often used through this documentation. As mentioned above, a context can contain a sub-context, and this situation between the two contexts is represented by a relation (exact: a CaseObjectRelation in the input interface, and a UIRelation in terms of the UI-Editor).

An UIRelation from context C to sub-context S will be placed on a screen c of the context C. Normally this UIRelation will lead to a new sub-screen s of context S, as shown in the following screenshot of the UI-Editor:

bild1.1

The UIRelation “Application has beneficiary” creates a sub-screen s

In one specific situation the question of context S don’t have to be placed on a new sub-screen, but can be placed on the original screen c. This is possible if the relation-type between S and C is a unique relation (i.e. there can only be one relation from S to C, as in “person has occupation” [assuming one person can only have one occupation]; vs. a relation like “person has disorder” [a person could suffer from several disorders]). In only this case questions from 2 or more contexts can be asked on one screen:

bild2.2

The actual screen with questions from both contexts looks as follows:

bild3

A list of possible context changes (types of UIRelations; or CaseObjectTypeRelations) can be found in the documents “Knowledge Description“ and ”Input Interface“.

Context changes are of no mayor importance when building your own screens. Most context changes will be displayed as additional groups (see [_elements_on_screens]). Other context changes are more relevant, as additional UI-elements (a group of buttons) will have to be displayed on the screen.

Elements on Screens

Basically every screen defined within COMPASS contains some questions. Every question consists of a question text (or label), and the corresponding answer widget, which can be a text field, a number field, a selection list, or radio buttons. An answer field can also contain units that should normally be displayed as drop-down-boxes:

image 2021 10 07 14 08 29 938

Additionally a screen can have a menu bar containing a navigation list; and a button row containing a set of basic buttons, like OK, Back, Cancel, etc. Every screen has a screen-title.

A basic element for structuring information on a screen is the group, which can host a set of other elements, including other groups. A group can have a border-line and a name. Relations (see Context / Context Change) are always represented by a group.

bild4

When creating new screen with the maintenance program, per default the screen has a main group and a button row with four buttons. You are then allowed to place questions and relations on this screen, but only into the main group.

Screens do not always appear as they have been defined by the maintenance. Every element on the screen can have an attached condition, specifying when it should appear. Even a complete screen can have a condition. Via this way a screen, group or question can be suppressed; e.g. when a group of questions should only be asked for females, but the applicant is male, or a screen contains questions to be asked only for specific benefits. When a screen has no questions left on it, the whole screen will be suppressed.

The COMPASS server will create a screen description that includes only the relevant questions on a screen. The Screen Builder program will not have to worry about conditions – all it has to do is to visualise the questions passed in the screen description, extract the given responses, and pass these responses back to the COMPASS server.

The Layout Concept of COMPASS

COMPASS is built entirely in Java, and its screens are shown (in the maintenance or when using the COMPASS Screen Builder client) using Swing. Those screens are displayed using the Java-concept of GridBagLayout. This is a LayoutManager, and we will present here the most interesting features of this concept, as they are required when building your own Screen Builder client.COMPASS is built entirely in Java, and its screens are shown (in the maintenance or when using the COMPASS Screen Builder client) using Swing. Those screens are displayed using the Java-concept of GridBagLayout. This is a LayoutManager, and we will present here the most interesting features of this concept, as they are required when building your own Screen Builder client.

GridBagLayout is one of the most flexible — and complex — layout managers the Java platform provides. A GridBagLayout places components in a grid of rows and columns, allowing specified components to span multiple rows or columns. Not all rows necessarily have the same height. Similarly, not all columns necessarily have the same width. Essentially, GridBagLayout places components in rectangles (cells) in a grid, and then uses the components' preferred sizes to determine how big the cells should be. So all elements are positioned on logical points of a grid and not on absolute positions.v

The following figure shows the grid for the preceding applet. As you can see, the grid has three rows and three columns. The button in the second row spans all the columns; the button in the third row spans the two right columns.

5.2

GridBagLayout needs some information for each object (component) in this grid. This information includes the following important constraints for an object:

x- and y-coordinate of the object: define the position of the object in the grid. For most locales the following is valid: the smaller the x-value, the more to the left (for Hebrew and Arabic: the smaller the x-value, the more to the right). For all locales: the smaller the y-value, the more to the top.

filling: the object can use all the available space of the defined grid, or it can just use the required space. There are 4 possibilities for this constraint:
HORIZONTAL - set the component’s width to the full size available.
VERTICAL - set the component’s height to the full size available.
BOTH - set the width and height to the size of the available space.
NONE – keep width and height of the component.

There are also other constraints for each object (component), which are described later in this document.

Example:
The first element text1 starts at position (1,1), the second element text2 starts at (1,2) and the third (a group with 4 buttons) at (2,1). The 4 buttons have the following positions within the group: button1 (0,0), button2 (1,0), button3 (2,0) and button4 (2,1).

bild6

In this example we have two groups; one is the default group containing the second group and the two texts. The GridBagLayout works also in subgroups: In the button-subgroup the 4 buttons are spread according to the GridBagLayout, too.

The GridBagLayout is directly supported by Java. You can find detailed documentations and descriptions at W3C organization and at SUN in the WWW.

The screen and userAction XML-Elements

Your Screen Builder program will communicate with the COMPASS server. The COMPASS Server will send response XML-elements containing screen descriptions, named screen in the XML structure. The Screen Builder client will answer with a request containing a userAction XML-element. These two elements, screen and userAction, are described in detail in the following subchapters.

Some example screens are shown in chapter 5, the data model for the screen is described in chapter 6, and the DTD for the two elements is included in chapter 7.

Please refer to the API-documentation for more details about the request and response elements.

The screen Element

Please note that all elements and attributes of a screen are listed in this document. Some elements and attributes are currently not used, and marked as such.

screen

screen is the basic element describing a complete screen. It contains all objects that have to be displayed. It consists of exactly one group (see [_group]) and can contain a navigation (see [_navigation]), a buttonRow (see [_buttonrow]) and a message (see [_message]).

The group is called main group in the maintenance program and contains all other elements or sub-groups.

<!ELEMENT screen (navigation?, buttonRow?, group, message?)>
<!ATTLIST screen
    id 			    CDATA #REQUIRED
    fixedID		    CDATA #IMPLIED
    title 		    CDATA ""
    helpID 		    CDATA #IMPLIED
    position 	    (northwest | southwest | northeast | southeast |
                    north | south | east | west | center) "center"
    width 		    CDATA "800"
    height 		    CDATA "600"
    respectSize     (true | false) "false"
    resizable 	    CDATA "true"
>

The XML object screen has the following attributes:

id - String
Unique key/ID for the screen in the interface. It is generated by COMPASS automatically.

fixedID - String
Unique ID for the screen, which is not modified during one capture operation.

title - String
Screen title. The attribute contains a text that should be displayed in the window title bar.

helpID - String (optional)
URL (i.e. path to file) of a help file for this screen.

width - Integer
Width of the screen in integers. This value can be set in the maintenance program. If the value is 0, the respectSize argument is set to false.

height - Integer
Height of the screen in integers. This value can be set in the maintenance program. If the value is 0, the respectSize argument is set to false.

respectSize - String (true or false)
This value is set to true, when width and height have non-zero values. The default for this attribute is false. In the maintenance this value can only be set implicitly, by either setting height and weight to non-zero, or by setting one of the attributes to zero. If this attribute is set to true, it is recommended to create a screen in the size given by width and height. If this value is not given, or set to false, then the screen can be created in any other size. The COMPASS Screen Builder client will create a screen with scrollbars, if this attribute is set to true, but width and height are not big enough so that the screen can display all its elements.

resizable - String (true or false)
This value is set internally by the COMPASS server. It is derived from the language, in which this screen is described. Depending on the orientation of the language (left to right for most languages, but right to left for Arabic and Hebrew), this value is set to false or true. true stands for left-to-right (and is therefore the default value), while false stands for right-to-left. The Screen Builder client should display the screen using the correct orientation. This affects the GridBagLayout, texts, radio-buttons, menu-bars, etc. An example:

image 2021 10 07 15 38 05 531

versus

image 2021 10 07 15 38 35 825

Example

<screen id="proposalSelection" title="Compass 4.1 Case Selection">

The following attribute cannot be set, influenced or modified via the maintenance program. The client can expect not to receive this attribute.

position - String(optional)
Possible values are north, northeast, east, southeast, south, southwest, west, northwest and center.

The navigation element is basically developed to describe menu bars. Via the entries in the menu some actions can be initialised, like “saving the case”, “cancel case recording”, or “jump to screen x”. The XML object navigation describes menu structures that can be nested. It contains items (see [_item]). The items are the menu entries and should be displayed in the order that is given within the navigation element.

<!ELEMENT navigation (item)+>
<!ATTLIST navigation
	id 			    CDATA #REQUIRED
	name 		    CDATA ""
	renderingHint   (buttonRow | menuBar | tree) "menuBar"
>

The XML object navigation has the following attributes:

id - String
Unique id of navigation in the interface. It is generated by COMPASS.

name - String
Name of the navigation. The name should not be displayed.

renderingHint - String (buttonRow|menuBar|tree)
Recommendation for the rendering of this navigation. Currently only menuBar is passed, which means that the items should be displayed in a menu-bar. buttonRow is a reserved keyword for the display of buttons and not used currently. tree is a reserved for presentation when generating HTML user interfaces and also not used currently.

Example

<navigation renderingHint="menuBar" id="NavigationBar" name="NavigationBar">
	<item id="File" name="File">
		<item id="_4" commandid="2" name="OK" default="true"></item>
		<item id="_6" commandid="8" name="Cancel"></item>
		<item id="_8" commandid="6" name="Save"></item>
	</item>
	<item id="Navigation" name="Navigation">
		<item id="_11" name="Occupation/Residence Smith"></item>
		<item id="_12" name="Disability Questions Smith"></item>
		<item id="_13" name="Beneficiary/Account Holder"></item>
		<item id="_14" name="General Questions Smith"></item>
	</item>
</navigation>

item

The entries of a navigation-element are called items. Such an entry has a name that should be displayed; separators within a menu can group items. It is important to display menu entries in the order items are listed in the navigation, especially to not mix up elements from different menu-groups. Menu entries can contain sub-menus; therefore items can contain further items:

bild8

As navigations can currently only be of type menuBar, the display of items with sub-items can be restricted to menus, and we recommend the above representation.

An appearance can be associated to each item by the XML object appearance (see [_appearance]).

The navigation and items cannot be modified via the maintenance program; they are generated by the COMPASS server, and contain no separators.

<!ELEMENT item (appearance?, item*)>
<!ATTLIST item
	id 			    CDATA #REQUIRED
	fixedID		    CDATA #IMPLIED
	name 			CDATA #REQUIRED
	group			CDATA #IMPLIED
	caseObj		    CDATA #IMPLIED
	shown			(true | false) #IMPLIED
	consistent		(true | false | POSCancel) #IMPLIED
	isSeparator 	(true | false) "false"
	default 		(true | false) "false"
	commandid		CDATA #IMPLIED
>

The XML object item has the following attributes:

id - String
Unique ID of the item in the interface; it is generated by COMPASS automatically. When a user selects a menu-entry, the corresponding id has to be passed back to the COMPASS server.

fixedID - String
Unique ID of a screen, if an item is being used in the navigation part of the screen. It uses the fixedID of the screen element.

name - String
The name of the entry, which is displayed to the user. Please note that separators do also have names. These names should not be not displayed. The name of a separator is always the name of the predecessor item.

group - String
This attribute is mainly set on items used in the navigation for specific screens that have been triggered as a result of a pursuit, drug, disorder, occupation or foreign travel. Screens that have been triggered by the same DBEntry (i.e. the same pursuit, disorder, etc) get the same attribute, so it is clear that they “belong together”. This attribute value starts with P, if the trigger was a pursuit, with D if the trigger was a disorder, with M, if the trigger was a drug/medicine, with F if the trigger was a trip/foreign travel, and with O if the trigger was an occupation. Additionally a grouping number can be defined in the maintenance for certain screens. Should a screen have a positive grouping number defined, this number nn will appear in the form X_nn as the value of this attribute.

caseObj - String
This attribute is only set on items used in the navigation. It describes the context of this screen. The value of this attribute is always

nn1_mm1;nn2_mm2;…;nnk_mmk

with k ≥1, and nnx being the typeID of a CaseObject (e.g. 27 for the assured person) and mmx being an unique integer identifier, that allows to group screens if required (e.g. when there are 2 Assured persons, it is possible to group the screens of one AP by sorting according to this attribute). Sometimes the context is given by several CaseObjects. In this case the concatenation of k elements is required.

shown - String (true|false)
This attribute is only set on items used in the navigation. If it is set to true, the screen was not displayed until this point during the current operation (view, capture). Otherwise the attribute contains the value false.

consistent - String (true|false|POSCancel)
This attribute is only set on items used in the navigation. It is set to POSCancel, if the screen is part of a POS-Module, which was cancelled during the capturing. Otherwise it is set to true, if the related screen contains no local inconsistencies. Otherwise the attribute contains the value false.

isSeparator - String (true|false)
This attribute determines whether the menu entry works as a separator for two other entries. It should be displayed as a separator line when isSeparator is true, else a normal entry. The name of a separator is always the name of the predecessor, and it should not be displayed.

commandid - String
This attribute is only used for items that resemble a command as those in the button row. Its value is the internal ID of the current Menu-command. In most of the cases it is one of the following values:

2

Next screen

OK

3

One screen back

Back

4

Finalise capture process

Turbo

6

Save current data

Save

8

Cancel Capturing process

Cancel

13

Ignore warnings

Ignore

401

Cancel the capturing in POS mode

Cancel

default - String (true|false)
This attribute can currently be ignored, as it can not be modified via the maintenance program. It makes sense when the navigation is of type buttonRow or menuBar. When it is set to true, the current item should be displayed as pre-selected. Pressing the Enter- or Return-key will then activate the default button.

Example

The following example corresponds to the picture shown above:

<item id="i01" name="File">
    <item id="1" name="MenuEntry 1" />
    <item id="2" name="MenuEntry 2" />
    <item id="3" name="MenuEntry 2" isSeparator="true"/>
    <item id="4" name="MenuEntry 3" >
    <item id="5" name="SubMenuEntry 1" />
    <item id="6" name="SubMenuEntry 2" />
</item>
<item id="ExitApp" name="Exit" />
</item>
<item id="i02" name="Settings">
    <item id="showControlParameters" name="Options..." />
</item>

appearance

Several of the XML objects of the Screen Builder interface describe actual widgets that will appear on the screen, like input fields, labels, buttons, etc. These elements need a position (on the screen), a dimension (describing the size of the widget) and an appearance defining things like alignment, font, colors etc.

<!ELEMENT appearance EMPTY>
<!ATTLIST appearance
	alignment 	        (north | northwest | northeast | south | west | east |
                        center | southwest | southeast) "west"
	bottom 		        CDATA "2"
	top 			    CDATA "2"
	left 			    CDATA "2"
	right 		        CDATA "2"
	fillStrategy 	    (both | horizontal | vertical | none) "none"
	font 			    CDATA "Arial"
	fontsize 		    CDATA "12"
	fontstyle 		    (italic | bold | plain) "plain"
	backgroundColor     CDATA "lightGray"
	foregroundColor     CDATA "lightBlue"
	toolTip 		    CDATA ""
	icon 			    CDATA "The DefaultIcon URL"
	border 		        (true | false) "false"
	hotKey 		        CDATA #IMPLIED
	disabled 		    (true | false) "false"
	helpID 		        CDATA #IMPLIED
	focus 		        (true | false) "false"
>

The XML object appearance has a large set of attributes, but not all are used. First we will describe those attributes which can be modified by the maintenance program, and which therefore should be expected and handled by the Screen Builder program:

alignment - String (northeast|east|southeast|south|southwest| west|northwest|north|center)
This attribute describes the location of the widget/text/object within the reserved space. E.g. top-left (which is represented by northwest. The possible values are described by the following picture:

bild10

fillStrategy - String (both|horizontal|vertical|none)
The fill strategy defines how to stretch the element in the given space. The element is stretched to left and right if fillStrategy is horizontal. The height is stretched to the maximal possible height, if fillStrategy is vertical. The fill strategy both combines vertical and horizontal, whereas no stretching is done if fillStrategy is none.

font - String
font defines the font of the textual-element. Please check if the desired font is available in the used environment. If the given font is not available in the current environment, it will be automatically replaced by another font.

fontsize - Integer
The font size in integers (pixels). „true type“ fonts are freely scalable but other fonts are available only in certain font sizes.

fontstyle - String (italic|bold|plain)
fontstyle defines whether the text should be italic, bold or plain.

backgroundColor - Integer
Background colour used for the display of the background of the current user interface element. COMPASS uses the colour coding according to RGB (Red/Green/Blue), where a sole number encodes three single colour values (24 bit integer). = For some elements, e.g. textInput, in case of wrong user input the colour is automatically set to “red”.

foregroundColor - Integer
Foreground colour used for the display of the foreground of the current user interface element. COMPASS uses the colour coding according to RGB (Red/Green/Blue), where a sole number encodes three single colour values (24 bit integer). For some elements, e.g. textInput, in case of wrong user input the colour of the label is automatically set to “red”.

toolTip String (optional)
A Tool-Tip automatically appears in a graphical user interface after a short delay when the cursor is positioned in the appropriate field. The shown text is the value of this attribute toolTip. It is possible to define a help text for each field and each label in the maintenance program. For some elements, e.g. textinput, in case of a wrong user input the Tool-Tip will contain an error message, specifying the reason for the wrong input.

border - String (true|false)
This value can only be set for groups and relations in the maintenance program. When border is true, a visible line (border) will surrounded the group; otherwise no border will appear.

disabled - String (true|false)
This attribute will always contain the value false, thus no implementation of this attribute is required in the Screen Builder client.

Example

<appearance	alignment="west" backgroundColor="16777215" disabled="false" border="false"
   foregroundColor="0" toolTip="" fillStrategy="none">
</appearance>

The following attributes cannot be set, influenced or modified via the maintenance program. The client can expect not to receive those attributes.

bottom

Integer

top

Integer

left

Integer

right

Integer

icon

String (optional)

hotKey

String (optional)

helpID

String (optional)

focus

String (true

message

If an error occurs in the COMPASS Server or the user wants to cancel the recording, COMPASS will again resend the last screen and will insert the XML object message. So you should check first whether a message is contained when processing a screen. A message is always the last element in a screen object. It is recommended to display the whole screen, and on top of it to place a small message-window with the message contained in the text-attribute of message. It should not be possible to activate the whole screen.

<!ELEMENT message EMPTY>
<!ATTLIST message
	text		CDATA #REQUIRED
	type		(info | error) "info"
	buttons		(message | confirm | yesNoCancel) "message"
>

The XML object message has the following attributes:

text - String
This is the hint or error text to be displayed.

type - String (info|error)
Type of the message: hint or error, different icons, message titles might be used.

buttons - String (message|confirm|yesNoCancel)
Depending on the type, the message window can contain some buttons. It is recommended to display only one OK-button, if buttons is message. When buttons is confirm, the buttons yes and cancel should be displayed by the Screen Builder client. When buttons is yesNoCancel, the buttons yes, no and cancel should be displayed by the Screen Builder client.

Example

<message type="info" buttons="confirm" text="Do you really want to quit?">
</message>

buttonRow

Every screen contains a couple of buttons. When the screen has been defined with the maintenance program, it contains one row of buttons, the buttonRow, which groups a set of buttons to be displayed on the screen. Normally this button-row is displayed at the bottom of the screen.

The maintenance program generates the following three buttons on every screen: OK, SAVE and Back, but there also might be others, like Cancel.

The XML object buttonRow basically consists of several buttons (see [_button]).

<!ELEMENT button (position, appearance?)>
<!ATTLIST button
	id 			CDATA #REQUIRED
	name 		CDATA #REQUIRED
	default 	(true | false) "false"
>

The XML object buttonRow has the following attributes:

id - String
A unique key/ID within the interface.

name - String
The name of the buttonRow in the interface. Do not display it.

Example

<buttonRow name="buttonRow" id="buttonRow">
    <button id="_0" name="OK" commandid="2" default="true">
        …
    </button>
    …
    <button id="_1" name="Cancel" commandid="8">
        …
    </button>
</buttonRow>

group

The element group is the most complex element in the screen builder interface, as it can be used in a nested way. A screen always contains exactly one group combining all user interface elements except navigation and buttonRow. A group always contains a layout (see [_layout]) and can contain a spacing (see [_spacing]) and further input elements or groups. The most common input-elements are textInput (see [_textinput]), numberInput (see [_numberinput]) and selection (see [_selection]), which are contained in a question (see [_question]) together with a text (question text, see [_text]). On screens with context changes additional buttons (see [_button] and [_screen_displaying_a_context_change]) are available.

A group is used to group some UI-elements that belong together, and perhaps even get a border-line to show the togetherness. Additionally groups are used to display the elements in a flexible way using the GridBagLayout.

<!ELEMENT group (layout, spacing?, (question | text | button | group)*)>
<!ATTLIST group
	id 		CDATA #REQUIRED
	name 	CDATA "This group's default name."
	type 	(group | input | list | addList | relation | relButtons | doctor)
>

The XML object group has the following attributes:

id - String
Unique ID of the group in the interface. The value is generated by COMPASS automatically.

name - String (optional)
Name of the group; it can be displayed, e.g. as a border-text, when the border attribute of the corresponding layout is set to true.

type - (group|input|list|addList|relation|relButtons|doctor)
Type of the group; default value is group. Special groups are
input - type for input groups of relations
list - type for list-groups of relations
addList - type for additional list groups for relate-relations
relation - type for the wrapping group of a relation (except doctor’s relations)
relButtons - type for the button group of a relation
doctor - type for relations that point to a doctor

Example

<group name="input group" id="4819" type="group">
...
</group>

layout

The layout of a group or a question is defined by the XML objects dimension (see [_dimension]), position (see [_position]) and appearance (see [_appearance]). These 3 elements are therefore grouped into the XML element layout:, which is attached to every question and every group, but none of these 3 XML elements is compulsory:

<!ELEMENT layout (dimension?, position?, appearance?)>

Example

<layout>
   <position relYPosition="5" relXPosition="2"></position>
   <appearance alignment="west" backgroundColor="16777215" disabled="false" border="false"
      foregroundColor="0" toolTip="" fillStrategy="none">
   </appearance>
</layout>

dimension

This element cannot be influenced by the maintenance program. Only in special cases a group contains a dimension element; e.g. when a date has to be described. COMPASS internally builds groups that contain several input fields, in this case one for the day, month any year. These groups are not visible with the maintenance program. The design of such an object has been hard coded within the COMPASS Server. In those cases the dimension element gives a rough idea of how many grid elements have to be reserved for its elements.

<!ELEMENT dimension EMPTY>
<!ATTLIST dimension
	width		CDATA "1"
	height      CDATA "1"
>

The XML object dimension has the following attributes:

width - Integer
Width of the current group in grid-elements.

height - Integer
Height of the current group in grid-elements.

Example

<dimension height="1" width="10"></dimension>

position

The XML object position is used by all XML objects that correspond to a widget that actually appears on the screen, like buttons, texts, selections, input fields, radio buttons, etc. The position describes the position of the current object within the grid of the current group, as shown by the GridBagLayout (see The Layout Concept of COMPASS).

<!ELEMENT position EMPTY>
<!ATTLIST position
	relXPosition 	CDATA "1"
	relYPosition	CDATA "1"
>

The XML object position has the following attributes:

relXPosition - Integer
The relative x-position (column). The smaller the value of relXPosition, the more to the left the object should be displayed. For Hebrew and Arabic the following rule is valid: The smaller the value of relXPosition, the more to the right the object should be displayed.

relYPosition - Integer
The relative y-position (row). The smaller the value of relYPosition, the more to the top the object should be displayed.

Example

<position relYPosition="1" relXPosition="1"></position>

spacing

The XML object spacing cannot be defined, modified or influenced by using the maintenance. Additionally the server never includes it in a screen, so that a Screen Builder client can safely ignore this XML element.

It has been designed originally to describe empty rows or empty columns.

<!ELEMENT spacing EMPTY>
<!ATTLIST spacing
	width 		CDATA "1"
	height		CDATA "1"
>

The XML object spacing has the following attributes:

width - Integer

height - Integer

text

The XML object text describes a label (text) of the screen. It consists of a position (see [_position]) and can include an appearance (see [_appearance]) and a value (see [_value]). Currently no value is included in a text object.

<!ELEMENT text (position, appearance?, value?)>
<!ATTLIST text
	id			    CDATA #REQUIRED
	text			CDATA #REQUIRED
	relFixedID		CDATA #IMPLIED
	optimizeWidth	(true | false) "true"
	error			(true | false) "false"
>

The XML object text has the following attributes:

id - String
COMPASS generates a unique ID for each text in one screen.

text - String
The text that should be displayed.

relFixedID - String
Only if this label has a related question with a fixedID attribute: the fixedID value of the related question.

optimizeWidth - String (true|false)
The length of the texts of all elements where optimizeWidth is set to true is maximized over all groups in the screen. This has the effect that the answers to those questions, which are normally placed in the next column, all start at the same column, even if in different groups.

error - String (true|false)
In case of wrong user input for the current question (see [_question]), the COMPASS server sets this attribute to true.

Example

<text id="2244" text="What is your nationality?" optimizeWidth="true" error="false">
   <position relYPosition="3" relXPosition="1"></position>
   <appearance alignment="west" backgroundColor="16777215" disabled="false" border="false"
      foregroundColor="128" toolTip="" fillStrategy="none">
   </appearance>
</text>

question

User interface elements for the recording of answers are described by the XML object question that combines further XML objects: a layout (see [_layout]) and one of the following input-elements: textInput (see [_textinput]), numberInput (see [_numberinput]), dateInput (see [_dateinput]), timeInput (see [_timeinput]), passwordInput (see [_passwordinput]) or selection (see [_selection]). The layout of a question can be ignored, as its input-element also has a layout, which is not more than a copy of the layout of the question.

<!ELEMENT question (layout, (textInput | numberInput | dateInput | timeInput
                   | passwordInput | selection))>
<!ATTLIST question
	id 			CDATA #REQUIRED
	fixedID		CDATA #IMPLIED
	catyID		CDATA #IMPLIED
	cotyID		CDATA #IMPLIED
	name 		CDATA ""
	required 	(true | false) "false"
>

The XML object question has the following attributes:

id - String
COMPASS generates a unique ID for each question in the interface.

fixedID - String
COMPASS generates a unique ID for each question in the interface, which is not being modified during one capture (view) operation..

catyID - Integer
This attribute contains the ID of the CaseAttributeType of the input-field in this question. Not all questions have to contain a proper Input-Field, so this attribute is not mandatory.

cotyID - Integer
This attribute contains the ID of the CaseObjectType belonging to the input-field in this question. Not all questions have to contain a proper Input-Field, so this attribute is not mandatory.

name - String
name of the input field, as defined with the maintenance program. This name should not be visualised.

Example

<question id="_33___1" name="Weight">
    <layout>
        …
    </layout>
    <numberInput id="_33__1" editable="true" columns="3" error="false">
        …
    </numberInput>
</question>

The following attribute cannot be set, influenced or modified via the maintenance program. The client can expect not to receive this attribute.

required - String (true|false)

textInput

The XML object textInput is used for recording of textual input; it has a position (see [_position]) and can contain an appearance (see [_appearance]) and a value (see [_value]). A textInput should be displayed as a text-Input field. This field should display the value, if a value has been passed.

<!ELEMENT textInput (position, appearance?, value?)>
<!ATTLIST textInput
	id 			CDATA #REQUIRED
	rows 		CDATA "1"
	columns 	CDATA "20"
	editable 	(true | false) "true"
	hasEvent 	(true | false) "false"
	error 		(true | false) "false"
	mandatory	(true | false) "false"
>

The XML object textInput has the following attributes:

id - String
COMPASS generates a unique ID for each textInput in the screen.

row - Integer
Height of the input field in number of rows. Often text is recorded with height 1.

columns - Integer
Width of the input field as number of columns. Please note that the COMPASS Screen Builder client makes all input fields scrollable to the right and left so input with more than the restricted number of characters can be recorded.

editable - String (true|false)
Indicates whether the input field is editable or not, it is editable if true, else not.

hasEvent - String (true|false) (optional)
It is not expected to find true here. For true the Screen Builder client should send the current screen to the COMPASS server as an userAction every time the textual-field has been modified.

error - String (true|false)
In case of wrong user input in this field the COMPASS server sets this attribute to true.

mandatory - String (true|false)
This attribute is true, if the question has to be answered, i.e. when the question has been set to “mandatory” in the UI-Editor. It does not check global plausibilities.

Example

<textInput id="176" rows="1" editable="true" columns="40" mandatory="true" error="false">
	<position relYPosition="1" relXPosition="2"></position>
	<appearance alignment="northwest" backgroundColor="16777215" disabled="false"
       border="false" foregroundColor="0" toolTip="" fillStrategy="none">
 	</appearance>
	<value id="254" value="United Kingdom">
 	</value>
</textInput>

value

The values of textual (textInput see [_textinput]), numerical (numberInput see [_numberinput]), date (dateInput see [_dateinput]), time (timeInput see [_timeinput]), password (passwordInput see [_passwordinput]) and selection (selection see [_selection]) fields are recorded as values in the Screen Builder interface. Please note that the values of a selection are passed in alphabetical order.

For a selection there can be several values, as they represent the possible selection-values. Be aware that a yes/no question is technically a selection. For all other types of input-fields maximal one value is allowed.

<!ELEMENT value EMPTY>
<!ATTLIST value
	id			CDATA #REQUIRED
	value		CDATA #REQUIRED
	selected	(true | false) "false"
	icon		CDATA "The DefaultIcon URL"
	row			CDATA #IMPLIED
	column		CDATA #IMPLIED
	key			(true | false) "true"
	keyString	CDATA #IMPLIED
>

The XML object value has the following attributes:

id - String
COMPASS generates an ID for each value in the interface; it is unique for the current screen and selection.

value - String
The actual value is a string in the screen builder interface; unknown values are unknown for selections and empty strings for all other input fields. This attribute is not passed, if the corresponding input field is still empty.

selected - String (true|false)
The value is selected, and should be displayed as selected, if this attribute is true. This attribute is used only for selections.

keyString - String
This attribute contains the key for a specific entry, if and only if the selection it belongs to is a list of search candidates and these candidates have a key (e.g. ICD10 Key for disorders).

The following attributes cannot be set, influenced or modified via the maintenance program. The client can expect not to receive those attributes.

icon - String (true|false)
row - Integer
column - Integer
key - String (true|false)

Example (of values in a selection)

<selection id="169" name="medicine or drugs (y/n)" error="false" noColumns="0"
   editable="true" noRows="1" renderingHint="RadioButton">
   <position … ></position>
   <appearance … ></appearance>
   <value selected="true" id="0" value="No"></value>
   <value id="1" value="Yes"></value>
   <value id="unknown" value="unknown"></value>
</selection>

numberInput

Numerical input is recorded via a numberInput element. The XML object numberInput has a position (see [_position]), it can have an appearance (see [_appearance]), a value (see [_value]) and any number of units (see [_unit]). A numberInput should be displayed as a text-Input or number-Input field. This field should display the value, if a value has been passed.

<!ELEMENT numberInput (position, appearance?, value?, unit*)>
<!ATTLIST numberInput
	id			CDATA #REQUIRED
	columns		CDATA "20"
	editable	(true | false) "true"
	hasEvent	(true | false) "false"
	error		(true | false) "false"
	mandatory	(true | false) "false"
>

The XML object numberInput has the following attributes:

id - String
COMPASS generates a unique ID for each numberInput in the interface.

columns - Integer
width of the input field as number of columns. I.e. it is possible to record a 15-digit number in a field with 15 columns. The height is always 1. Please note that the COMPASS Screen Builder client makes all input fields scrollable to the right and left so input with more than the restricted number of characters can be recorded.

editable - String (true|false)
Indicates whether the input field is editable or not, it is editable if true, else not.

hasEvent - String (true|false) (optional)
It is not expected to find true here. For true the Screen Builder client should send the current screen to the COMPASS server as an userAction every time the numeric-field has been modified.

error - String (true|false)
In case of wrong user input in this field the COMPASS server sets this attribute to true.

mandatory - String (true|false)
This attribute is true, if the question has to be answered, i.e. when the question has been set to “mandatory” in the UI-Editor. It does not check global plausibilities.

Example

<numberInput id="135" editable="true" columns="10" mandatory="true" error="false">
	<position relYPosition="3" relXPosition="2"></position>
	<appearance … > </appearance>
	<value id="340" value="30000"></value>
	<unit name="£/Year" id="1"></unit>
</numberInput>

unit

One or more units can be matched to each numberInput (see [_numberinput]). The XML object unit is used to represent each of these units. It can have an appearance (see [_appearance]), which is currently never the case, as the appearance of a unit cannot be modified via the maintenance program. The first unit of a numberInput is the selected unit. So the units should be displayed in the order they are listed in the numberInput-element.

<!ELEMENT unit (appearance?)>
<!ATTLIST unit
	id			CDATA #REQUIRED
	name		CDATA #REQUIRED
>

The XML object unit has the following attributes:

id - String
COMPASS generates a unique ID for each unit in the interface.

name - String
Name of the unit, to be displayed after the number-input field

Example

<numberInput id="135" editable="true" columns="10" error="false">
	<position relYPosition="3" relXPosition="2"></position>
	<appearance … > </appearance>
	<value id="340" value="30000"></value>
	<unit name="£/Year" id="1"></unit>
</numberInput>

dateInput

The XML object dateInput is used for capturing dates and periods. Dates can consist of a day, month and year, or only month and year, or only a year. When a question expects a date for an answer, in the maintenance it is possible to specify whether the date (or a period) should be displayed separately. When the separately-box is ticked, COMPASS will create a group containing several numberInputs that will be used for the day, the month, the year, and perhaps the duration. Using date-fields separately, has the advantages of your Screen Builder client not having handle/display dateInput; the mechanism for group and numberInput is then enough to handle and display date fields.

Nonetheless we will present the dateInput for completeness reasons. It always contains a position (see [_position]); it can have an appearance (see [_appearance]) and a value (see [_value]), which contains the date/period. A dateInput is only used if the field expecting a date or period is set to “do not display separately”.

For dates the syntax of the value is dd.mm.yyyy where each of the three parts can be replaced by question marks, if unknown. E.g. 31.??.2012.

For periods the syntax of the value is beginDate;endDate;nn;unit where beginDate and endDate apply to the syntax described in the previous paragraph, whereas nn and unit are used to describe the duration in the form nn is a numeric value, and unit is the ID of the chosen unit. E.g. 31.??.2012;??.??.????;2;2 or 31.12.2010;??.??.2012;?;? when the duration is unknown. When a period is required, the four possible units are passed as well as unit XML-elements.

<!ELEMENT dateInput (position, appearance?, value?, unit*)>
<!ATTLIST dateInput
	id			CDATA #REQUIRED
	columns		CDATA "20"
	editable	(true | false) "true"
	hasEvent	(true | false) "false"
	error		(true | false) "false"
	mandatory	(true | false) "false"
	display		(DMY | MY | Y) "DMY"
>

The XML object dateInput has the following attributes:

id - String
COMPASS generates a unique ID for each dateInput in the interface.

columns - Integer
Number of possible characters for input.

editable - String (true|false)
Indication whether the date or period can be modified. A dateInput should not be modifiable if the value is false.

hasEvent - String (true|false) (optional)
It is not expected to find true here. For true the Screen Builder client should send the current screen to the COMPASS server as an userAction every time the date/period-field has been modified.

error - String (true|false)
In case of wrong user input the COMPASS server sets the attribute to true.

mandatory - String (true|false)
This attribute is true, if the question has to be answered, i.e. when the question has been set to “mandatory” in the UI-Editor.

display - String (DMY | MY | Y)
Tells the ScreenBuilder whether to capture only the year (Y), year and month (MY), or day, month and year (DMY). Default is to capture day, month and year.

timeInput

The XML object timeInput is used for capturing a time. A point of time can consist of an hour, minute and seconds, or only of an hour and a minute, or only an hour. When a question expects a time for an answer, in the maintenance it is possible to specify whether the time should be displayed separately. When the separately-box is ticked, COMPASS will create a group containing several numberInputs that will be used for the hour, minute and the second. We recommend always using time-fields separately, what has four reasons:

  • Your Screen Builder client does not have to handle/display timeInput, the mechanism for group and numberInput is then enough to handle and display time fields

  • The representation of a time-value is not clear, and quite unreadable

  • Fields with times are rare

  • The mechanism for capturing a time might be buggy.

Nonetheless we will present the timeInput for completeness reasons. It always contains a position (see [_position]); it can have an appearance (see [_appearance]) and a value (see [_value]), which contains the date/period. A timeInput is only used if the field expecting a time is set to “do not display separately”.

<!ELEMENT timeInput (position, appearance?, value?)>
<!ATTLIST timeInput
	id			CDATA #REQUIRED
	editable	(true | false) "true"
	hasEvent	(true | false) "false"
	error		(true | false) "false"
	mandatory	(true | false) "false"
>

The XML object timeInput has the following attributes:

id - String
COMPASS generates a unique ID for each timeInput in the interface.

editable - String (true|false)
Indication whether the time can be modified. A timeInput should not be modifiable if the value is false.

hasEvent - String (true|false) (optional)
It is not expected to find true here. For true the Screen Builder client should send the current screen to the COMPASS server as an userAction every time the time-field has been modified.

error - String (true|false)
In case of wrong user input the COMPASS server sets the attribute to true.

mandatory - String (true|false)
This attribute is true, if the question has to be answered, i.e. when the question has been set to “mandatory” in the UI-Editor. It does not check global plausibilities.

passwordInput

This XML object passwordInput cannot be defined or changed via the maintenance. The user can therefore ignore these XML objects when only receiving screens built with the maintenance. Nonetheless there are some screens that use it. The passwordInput is used to describe textual input fields for passwords. I.e. that the recommended display for such input-fields is to hide the textual input by covering it by other signs like “**”.

The XML object passwordInput has a position (see [_position]); it can have an appearance (see [_appearance]) and a value (see [_value]). A passwordInput cannot be defined by the maintenance program, but can be processed by the screen builder.

<!ELEMENT passwordInput (position, appearance?, value?)>
<!ATTLIST passwordInput
	id			CDATA #REQUIRED
	format		CDATA ""
	columns		CDATA "20"
	editable	(true|false) "true"
	hasEvent	(true|false) "false"
>

The XML object passwordInput has the following attributes:

id - String
COMPASS generates a unique ID for each passwordInput in the interface.

format - String
This attribute is currently not used.

columns - Integer
Number of allowed characters for the password.

editable - String (true|false)
Indication whether the password can be entered or modified. A passwordInput should not be modifiable if the value is false.

hasEvent - String (true|false) (optional)
It is not expected to find true here. For true the Screen Builder client should send the current screen to the COMPASS server as an userAction every time the password-field has been modified.

Example

<passwordInput columns="10" editable="true" hasEvent="false" id="passwordInput">
	<position relXPosition="0" relYPosition="0" />
      <appearance alignment="west" backgroundColor="lightGray" border="false" bottom="2"
         disabled="false" fillStrategy="horizontal" focus="true" font="Tahoma"
         fontsize="14" fontstyle="plain" foregroundColor="lightBlue"
         icon="The DefaultIcon URL" left="10" right="2" toolTip="" top="2" />
</passwordInput>

selection

This is the most common input-element of COMPASS. It requires not a textual input, but a selection from predefined values. This can also be the selection of Yes or No. Most commonly a selection is displayed as radio buttons, a list box, or as a (editable) combo-box.

The XML object selection has a position (see [_position]); it can have an appearance ([_appearance]) and several values (see [_value]). The definition of headings (see [_heading]) has been planned for when the renderingHint is table. As table is not supported yet, the heading-element can be ignored.

<!ELEMENT selection (position, appearance?, value*, heading*)>
<!ATTLIST selection
	id			    CDATA #REQUIRED
	name			CDATA "default selection name"
	renderingHint	(List | EditableComboBox | ComboBox | RadioButton |
                    Vertical_RadioButtons | Horizontal_RadioButtons | Table |
                    User-specific01 | User-specific02 | User-specific03 |
                    User-specific04 | User-specific05 | User-specific06 |
                    User-specific07 | User-specific08 | User-specific09 |
                    User-specific10 | Invisible) "RadioButton"
	shape			(RadioButton | CheckBox) "RadioButton"
	noColumns		CDATA "1"
	noRows		    CDATA "7"
	collected		(true | false) "false"
	multiple		(true | false) "false"
	hasEvent		(true | false) "false"
	editable		(true | false) "false"
	error			(true | false) "false"
	mandatory		(true | false) "false"
>

The XML object selection has the following attributes:

id - String
COMPASS generates a unique ID for each selection in the interface.

name - String
Name of selection; this name is displayed in the maintenance program, but should not be displayed by the Screen Builder program.

renderingHint - String (List|EditableComboBox|ComboBox|RadioButton| Vertical_RadioButtons|Horizontal_RadioButtons|Table| User-specific01|User-specific02|User-specific03| User-specific04|User-specific05|User-specific06| User-specific07|User-specific08|User-specific09| User-specific10|Invisible)
Rendering suggestion for the selection. Please note that the values Table, EditableComboBox, Vertical_RadioButtons and Horizontal_RadioButtons are not supported by the maintenance, so the user can expect not to receive those values. In the maintenance program it is possible to define the rendering suggestion User-specificnn, which can be represented by a visualisation client in a customer-specific way. COMPASS clients visualise these 10 options as lists.

noRows - Integer
Number of rows to be displayed when the renderingHint is List, EditableComboBox or ComboBox

noColumns - Integer
Number of columns to be displayed when the renderingHint is List, EditableComboBox or ComboBox

collected - String (true|false)
Is set to true, if this selection list belongs to a relation. Otherwise set to false. false is the default.

multiple - String (true|false)
Several entries can be selected if true. This is not valid for the rendering of RadioButtons.

hasEvent - String (true|false)
When this value is set to true, the selected values should be sent as an userAction to the server after each modification of the selection. This will happen mainly when the selection is a multiple-selection, and/or the list of entries contains a value like “none of the others”. COMPASS will then resend the screen updating the selection (in this case COMPASS deselects all other entries).

editable - String (true|false)
Indication whether the selection can be entered or modified. A selection should not be modifiable if the value is false.

error - String (true|false)
In case of wrong user selection the COMPASS server sets the attribute to true.

mandatory - String (true|false)
This attribute is true, if the question has to be answered, i.e. when the question has been set to “mandatory” in the UI-Editor. It does not check global plausibilities.

The following attribute is not supported either by the maintenance program, or by the COMPASS Screen Builder client. The client can expect not to receive this attribute in a screen created with the maintenance program.

shape - String (RadioButton|CheckBox)
Only relevant for renderingHint = RadioButton: The selection should be rendered as a CheckBox instead of RadioButtons, when CheckBox is chosen as shape.

Example

<selection id="127" name="occupational status" error="false" mandatory="false"
    noColumns="1" editable="true" noRows="15" renderingHint="ComboBox">
    <position relYPosition="2" relXPosition="2"></position>
	<appearance alignment="west" backgroundColor="16777215" disabled="false"
       border="false" foregroundColor="0" toolTip="" fillStrategy="none">
    </appearance>
    <value id="2" value="Apprentice"></value>
	<value id="10" value="Civil Servant"></value>
	<value selected="true" id="11" value="Employee"></value>
	<value id="6" value="Housewife"></value>
	<value id="1" value="Other"></value>
	<value id="7" value="Pensioner"></value>
	<value id="3" value="Self employed"></value>
	<value id="5" value="Student"></value>
	<value id="0" value="Unemployed"></value>
	<value id="4" value="Worker"></value>
	<value id="unknown" value="unknown"></value>
</selection>

heading

Not used currently. This element has been designed for use as a table-header for a selection with renderingHint table. As table is a not supported renderingHint, this element does currently not appear.

You can define a heading for each column if you have chosen the renderingHint table in a selection.

<!ELEMENT heading EMPTY>
<!ATTLIST heading
	id		CDATA #REQUIRED
	name	CDATA #REQUIRED
>

The XML object heading has the following attributes:

id - String
COMPASS generates a unique ID for each heading in the interface.

name - String
Name of the heading in the interface. To be displayed as a column name in a table.

button

Buttons are represented by the XML object button. They can appear in a buttonRow (see [_buttonrow]) or in a group (see [_group]). Currently the only situation where buttons appear in a group is when a context change has been defined on a screen (see Screen Displaying a Context Change). A special group containing buttons manages those buttons (New, Delete, Edit).

The XML object button has a position (see [_position]) and it can have an appearance (see [_appearance]).

<!ELEMENT button (position, appearance?)>
<!ATTLIST button
	id 			    CDATA #REQUIRED
	name 			CDATA #REQUIRED
	commandid		CDATA #REQUIRED
	relQuest		CDATA #IMPLIED
	default 		(true | false) "false"
>

The XML object button has the following attributes:

id - String
COMPASS generates a unique ID for each button in the interface. When a user presses a button, the corresponding id has to be passed back to the COMPASS server.

name - String
Name to be displayed on the button.

commandid - String
Internal ID of the current Button-command. In most of the cases it is one of the following values:

2

Next screen

OK

3

One screen back

Back

4

Finalise capture process

Turbo

6

Save current data

Save

8

Cancel Capturing process

Cancel

13

Ignore warnings

Ignore

101

When relations are defined

Add, New

102

When relations are defined

Edit (details for a selected object)

103

When relations are defined

Delete (the selected object)

104

When related questions-relations are defined

Relate (the selected object)

105

When related questions-relations are defined

Unrelate (the selected object)

201

Search Screen only

Search again

202

Search Screen only

Search term accepted: OK

203

Search Screen only

Cancel Search process

401

Cancel the capturing in POS mode

Cancel

When running in a multi-language environment, more than one button with commandid 201 can appear on the search screen: one for each language.

relQuest - String
This attribute does only exist for those buttons with commandid 103. It contains the id of the question, that is related to this button. This question is typically a selection, where the user selects the entry to be deleted.

default - String (true|false)
The current button should be displayed as pre-selected, if the value is true. Pressing the Enter or Return Key should activate the default button.

Example

<button id="_4" name="New" commandid="101">
	<position relYPosition="1" relXPosition="1"></position>
	<appearance fillStrategy="none" disabled="false" border="false" alignment="northwest"
       foregroundColor="0" toolTip="">
    </appearance>
</button>

The userAction element

An userAction is a XML object that has to be sent to the COMPASS Server when either:

  • A button has been pressed,

  • An item from a navigation has been selected, or

  • An modification happened in a input-fields with hasEvent=true

The structure of the userAction with its sub-objects is explained in this chapter.

userAction

When the Screen Builder client sends a userAction to the COMPASS Server, the server needs to know:

  • Which button has been pressed, or which item from a navigation has been selected, and

  • What are the current values to the questions on the screen (e.g. a number recorded for the height-question; a list of selected values of a selection, etc.)

Thus the XML object userAction contains any number of answer-elements (see [_answer]) and two attributes describing the triggering button or item.

<!ELEMENT userAction (answer)*>
<!ATTLIST userAction
    screenID        CDATA  #REQUIRED
    screenCommand   CDATA  #REQUIRED
>

The XML object userAction has the following attributes:

screenID - String
This attribute should contain the ID of the current screen. This is the value id of the last screen sent by the COMPASS server.

screenCommand - String
This attribute contains the id of the button, item, or input-field (mainly the input field selection), that triggered the userAction.

Example

<userAction screenCommand="_16" screenID="_19">
 	<answer question="_22"></answer>
	<answer question="_21">
		<value id="0" value="No"></value>
	</answer>
	<answer question="_23"></answer>
</userAction>

answer

An answer to a question is stored in the XML-object answer. Each answer object is related to a specific question, and contains the value of the answer to this question. For questions expecting a textual-, numerical-, date-, time- or password-answer, only one value is expected. For selections (namely multiple selections) more than one answer is possible. Thus the answer object can contain any number of value (see [_value]) objects.

<!ELEMENT answer (value)*>
<!ATTLIST answer
    question      CDATA  #REQUIRED
>

The XML object answer has the following attribute:

question - String
This attribute should contain the ID of the relevant question-object in the screen description.

Example

See example in [_useraction].

value

The XML object value contains the actual value, as specified for a specific question on the screen. We have to distinguish here between two types of questions: First those questions that expect a textual input (textInput, numberInput, dateInput, timeInput, passwordInput): they have only one value, which is defined by the textual input (attribute value) and a possible unit (attribute unit) (unit only if question is of type numberInput). They might also contain the id-attribute, but this attribute is ignored by the server. Then those questions represented by a selection: they can have several values, each of which is denoted by its id as defined in the values of the selection. This id is represented in the value element also by the attribute id. The value might also contain the id-attribute, but the server ignores this attribute.

<!ELEMENT value EMPTY>
<!ATTLIST value
    id            CDATA  #IMPLIED
    value         CDATA  #IMPLIED
    unit          CDATA  #IMPLIED
>

id - String
This attribute has to be filled, if the related input field is a selection. It contains the ID (id-attribute) of the relevant value in the input-object in the screen description.

value - String
This attribute contains the textual input for this field as a string. In case of a selection it can contain the text that belongs to the attribute id. In all other cases (numberInput, textInput, dateInput, timeInput, passwordInput) this attribute has to be passed, even if it contains the empty string.

unit - String
This attribute is only filled, when the selected or input value has a unit, which is the case only for questions of type numberInput. In this case it contains the ID (id-attribute) of the relevant unit in the numberInput-object in the screen description.

Example

Answer to a selection:

<answer question="_21">
	<value id="0" value="No"></value>
</answer>

Answer to a numberInput with a unit:

<answer question="_17">
	<value id="316" value="33" unit="16"></value>
</answer>

No answer given to a selection:

<answer question="_75"></answer>

No answer to a numberInput:

<answer question="_17">
	<value id="316" value="" unit="16"></value>
</answer>

Building the Screen Builder Client

In this chapter we assume that the connection using the LIGHT_MODE_API to the COMPASS server is established. Please refer to the documents “APIs” and “Communication via xxx” for details about the LIGHT_MODE_API or the communication with the COMPASS Server.

A Screen Builder client will have to start sending a request to the server. In order to get back a screen description the request should be an operation of type capture, view or createAndCapture. An example of such a request can be found in Starting the Screen Builder Cycle. The COMPASS Server will answer with a response element. This response can contain either an operationResult (see Server response is an operationResult) or a screen (see Server response is a screen ). In the second case the screen has to be visualised by the Screen Builder client (see Transforming the screen into a screen). Assuming the user has made some input on the visualised screen, the Screen Builder client has to extract the input information from the screen, and put it into a userAction (see Processing User Input). This userAction has to be sent to the COMPASS server, and the client then waits for the next response from the server.

COMPASS Server and Screen Builder client will send each other userActions and screens, until the COMPASS server sends an operationResult. Now the Screen Builder client has to react differently, but depending on the planned workflow and the returnCode of the operationResult: e.g. if the returnCode is 0, the captured case could now be assessed.

Design Recommendations for Screens in the UI-Editor includes some recommendations for the design of screens with the maintenance program: The simpler the screen definition, the easier the visualisation of the screen. Navigations and Button-Rows we present the different kind of button groups, and their visualisation.

Starting the Screen Builder Cycle

To start the cycle of screen →userAction →screen →userAction … the client has to send a request containing an operation of type capture, createAndCapture or view.

Example

Capturing the risk data (Source-type 101) of the case Case1, technical data already exists:

<?xml version="1.0" encoding="ISO-8859-1" standalone="yes"?>
<request>
  <operation>
    <capture language=”en” sourceType=”101” loggingArea=”0”>
      <caseSourceReference>
 	    <databaseReference id=”Case01” subId=”TEST”></databaseReference>
      </caseSourceReference>
      <caseDestinationReference>
        <databaseReference id=”Case01” subId=”TEST”></databaseReference>
      </caseDestinationReference>
    </capture>
  </operation>
</request>

Server response is a screen

The COMPASS server receives the request, processes the defined operations, and sends back a response, which hopefully contains a screen or an operationResult with returnCode 0. Here we will focus on the response containing a screen.

As the response contains a screen, it can be assumed that the request sent to the server could be processed without a problem.

Example

The screen contains a main group, which has been abbreviated in this example. Also all appearance elements have been abbreviated:

<?xml version="1.0" encoding="Unicode" standalone="no"?>
<response>
<screen id="_17" title="Smoking in the past hjhjk">
   <navigation renderingHint="menuBar" id="NavigationBar" name="NavigationBar">
      <item id="File" name="File">
         <item id="_4" commandid="2" name="OK" default="true">
            <appearance fillStrategy="none" … ></appearance>
         </item>
         <item id="_6" commandid="8" name="Cancel">
            <appearance fillStrategy="none" … ></appearance>
         </item>
         <item id="_8" commandid="3" name="Back">
            <appearance fillStrategy="none" … ></appearance>
         </item>
         <item id="_10" commandid="6" name="Save">
            <appearance fillStrategy="none" … ></appearance>
         </item>
      </item>
      <item id="Navigation" name="Navigation">
         <item id="_13" name="Occupation/Residence hjhjk"></item>
         <item id="_14" name="Beneficiary/Account Holder"></item>
         <item id="_15" name="General Questions hjhjk"></item>
         <item id="_16" name="Health Questions hjhjk"></item>
         <item id="_17" name="Smoking in the past hjhjk"></item>
         <item id="_18" name="Disorder CI hjhjk"></item>
      </item>
   </navigation>
   <buttonRow name="buttonRow" id="buttonRow">
      <button id="_0" name="OK" commandid="2" default="true">
         <position relYPosition="1" relXPosition="4"></position>
         <appearance fillStrategy="none" … ></appearance>
      </button>
      <button id="_1" name="Back" commandid="3">
         <position relYPosition="1" relXPosition="2"></position>
         <appearance fillStrategy="none" … ></appearance>
      </button>
      <button id="_2" name="Save" commandid="6">
         <position relYPosition="1" relXPosition="1"></position>
         <appearance fillStrategy="none" … ></appearance>
      </button>
   </buttonRow>
   <group name="UI-Main Group" id="9640">
      ...
   </group>
</screen>
</response>

Please check if there is a message-element in the screen. In this case you have to display the message text to the user and send back the answer to the message to the COMPASS server. You can, but you don’t have to, show the screen sent along with the message.

If there is no message in the screen, continue visualising all given user interface elements. This should be done step by step, as specified in the next chapter.

Transforming the screen into a screen

The passed screen contains a complete screen description. Its positions and other layout attributes are based on the assumption that all information will be prompted on one screen, that looks similar to the screen as seen in the UI-Editor of the maintenance. Nonetheless it is irrelevant for COMPASS, whether a Screen Builder client follows this layout or creates screens that are independent from the suggested layout. For example it is possible to retrieve the information for the requested fields on several screens, or even from other sources.

In this chapter we assume that the Screen Builder client wants to build a screen that looks similar to the one presented in the UI-Editor of COMPASS.

Building the Screen: title, navigation, buttons, message

First the handling of messages should be clear: either the message is displayed on top of the current screen, or only the message is displayed. If only the message should be displayed, then there is no need to build the actual screen. See A Message Screen for a typical representation of a message. If the screen should be displayed underneath the message window, make sure that after the display of the screen, the Screen Builder client does not forget to prompt the message-window.

The title for screen is extracted from the title attribute of the screen. When the screen is not visualised in a graphical environment, it should be put into one of the first rows – making it recognisable as the screen title.

Analyse the navigation-element. We strongly recommend visualising the navigation as a menu, normally located right below the screen title. The menu can be built as popup menus in several, but not in all character based environments.

Normally all screens contain a buttonRow. Display the buttons of the buttonRow in a group at the bottom of the screen. For character based environments the buttons can be rendered as PF-keys.

The Screen Builder client should save all id-attributes of the involved items, buttons and screen. They will be used later, when the userAction is built.

Transforming the Elements

Each screen contains a (main) group, which contains other user interface elements like groups, questions and answers. This main group can contain any number of further groups, which again can contain further groups. The more groups are nested the more sophisticated the transformation will be, especially in character based environments.

There might also be groups for buttons. They are found when a context change is defined on the screen, e.g. at when capturing the disorders, drugs, pursuits etc. A possible transformation of those groups is shown in Screen Displaying a Context Change.

Collect the groups and other user interface elements in the main group. The positions of all group elements are relative. You might have to transform them into absolute positions, e.g. in a character-based environment. Do the same for all subgroups, and iterate over further subgroups.

Once you have the positions for all groups and widgets, they can be displayed on the screen. For each question its id has to be remembered for the moment when the userAction is built. Similarly for each widget (ComboBox, Text-field, RadioButton, etc) every possible value has its id, which also has to be remembered for the later building of the userAction.

Some more recommendations:

  • Draw border around groups where it is defined by the border=true” attribute of the group.

  • Make sure that selected values are “selected” when displaying the selection.

  • Use the appearance of each widget to display information in the correct colour, alignment, font etc.

  • It is recommended to display an available tool tip for a field

  • In case that an input-field has an attribute error=true”, the corresponding field has to be marked as erroneous. This is done by COMPASS by setting a red-colour in the appearance of the field, and the current tool tip includes the error message. It is thus important to also build an error handling for such input-fields, to help the user during the data capturing.

  • Should the attribute hasEvent be set to true for an input-field, then the Screen Builder client should be extremely aware of this field: any change of the value(s) should trigger a userAction to the server.

Processing User Input

Once the Screen Builder Client has displayed the screen, it should be activated again by one of the 3 actions described in The userAction element. The Screen Builder program has to gather the information of all input fields, and put the information for each input field into an object answer. All answer-elements are put into the object userAction, which is then wrapped into a request element.

The elements value, answer and screen make use of the id values that were defined in the screen. This is the reason why the Screen Builder client has to save those IDs during the process of building the screen.

For more details about how to fill the attributes of value, answer and screen see The userAction element with its subchapters

Example

<?xml version="1.0" encoding="Unicode" standalone="no"?>
<request>
   <userAction screenCommand="_16" screenID="_19">
      <answer question="_22"></answer>
      <answer question="_21">
         <value id="0" value="No"></value>
      </answer>
      <answer question="_23"></answer>
   </userAction>
</request>

Server response is an operationResult

The “screen building”-process has ended when the COMPASS server sends an operationResult instead of a screen. If the returnCode of the operationResult is 0, it can be assumed that the sequence of screens has ended, and the original operation (capture, createAndCapture or view) has been completed successfully. The client (our Screen Builder client) can now continue by sending another operation to the server; e.g. an assess operation for the just captured case.

When an error occurred, the operationResult contains a returnCode > 0 and one or more errorDescription-elements (see documentation „COMPASS APIs“ for details about the errorDescription and the error handling). In this case the error has to be handled, before the client can continue sending requests to the server.

Design Recommendations for Screens in the UI-Editor

The definition of the user interface is done via the maintenance program by the underwriting department. To keep the structure, und thus the visualisation, simple, some suggestions should be communicated to the designers of the screens:

Groups
Define only necessary groups. The extreme example would be defining an own group for each question text and each input. Many groups make building a screen more difficult and should therefore be avoided. In the example below we show an unnecessary group, as it is the only element in another group:

image 2021 10 14 10 24 59 155

Positions
Choose simple arrangements, e.g. put all question texts in the same column (grid) of one group. The answers go in the next column of the same group.

Restrictions of Length
Ensure texts are not longer than the defined space. This is also valid for selections: make the width of a list box the same length as the length of the longest entry.

Selections
The size of a selection widget like list should be big enough to contain all elements without a scroll-bar, as long as the number and length of the elements is not too high. I.e. don’t create a list with height 6 if it will have to store 7 elements. Example:

bild11

instead of

bild13

The UI Editor automatically creates a buttonRow with 3 to 4 buttons for each screen. Not much can be done about these buttons with the maintenance.

The COMPASS server adds a menu-bar (in form of a navigation) to each screen. This navigation contains a menu for:

  • file operations: are basically a copy of the buttons in the buttonRow

  • navigation: is a list of screens, as it is currently valid (clicking on one screen of the list will navigate to that screen)

  • language selection; allows to change the language for this screen (only valid, if COMPASS is running in Multilanguage mode)

There are also some additional screens, where the navigation and the buttonRow might differ from the standard set of buttons/navigation possibilities. In the following chapters we will present those types of screens:

coccThe buttonRow contains the following items:

  • OK - Confirmation of all input, show next screen

  • Back - Confirmation of all input, show previous screen (Not on first screen)

  • Save - Confirmation of all input and saving it

  • Cancel - Cancelling data capturing (A confirmation message follows)

The navigation contains the File-submenu, which includes exactly those 4 (or 3) actions. The submenus Navigation and Language are as described above.

Example

<navigation renderingHint="menuBar" id="NavigationBar" name="NavigationBar">
   <item id="File" name="File">
      <item id="_7" commandid="2" name="OK" default="true">
         <appearance fillStrategy="none" ...></appearance>
      </item>
      <item id="_9" commandid="8" name="Cancel">
         <appearance fillStrategy="none" ...></appearance>
      </item>
      <item id="_11" commandid="3" name="Back">
         <appearance fillStrategy="none" ...></appearance>
      </item>
      <item id="_13" commandid="6" name="Save">
         <appearance fillStrategy="none" ...></appearance>
      </item>
   </item>
   <item id="Navigation" name="Navigation">
      <item id="_16" name="Occupation/Residence Mister X"></item>
      <item id="_17" name="Beneficiary/Account Holder (Application)"></item>
      <item id="_18" name="General Questions Mister X"></item>
      <item id="_19" name="Health Questions Mister X"></item>
      <item id="_20" name="Drinking"></item>
      <item id="_21" name="Smoking"></item>
      <item id="_22" name="Disorder Selection Mister X"></item>
      <item id="_23" name="Disorder CI Mister X"></item>
      <item id="_24" name="Further details/information/documents"></item>
   </item>
   <item id="Language" name="Language">
      <item id="_14" name="Polish"></item>
      <item id="_15" name="English" default="true"></item>
   </item>
</navigation>

<buttonRow name="buttonRow" id="buttonRow">
   <button id="_0" name="OK" commandid="2" default="true">
      <position relYPosition="1" relXPosition="4"></position>
      <appearance fillStrategy="none" ...></appearance>
   </button>
   <button id="_1" name="Cancel" commandid="8">
      <position relYPosition="1" relXPosition="3"></position>
      <appearance fillStrategy="none" ...></appearance>
   </button>
   <button id="_2" name="Back" commandid="3">
      <position relYPosition="1" relXPosition="2"></position>
      <appearance fillStrategy="none" ...></appearance>
   </button>
   <button id="_3" name="Save" commandid="6">
      <position relYPosition="1" relXPosition="1"></position>
      <appearance fillStrategy="none" ...></appearance>
   </button>
</buttonRow>
image 2021 10 08 14 16 32 906

The buttonRow contains the following items:

  • OK - Confirmation of all input, show next screen

  • Back - Confirmation of all input, show previous screen (Not on first screen)

  • Save - Confirmation of all input and saving it

  • Cancel - Cancelling data capturing of the current POS module (button visible only on screens defined in a POS-module)

The navigation contains the File-submenu, which includes exactly those 4 (or 3) actions as in the Head-Office mode, i.e. Cancel has a different meaning to the Cancel-button. The submenus Navigation and Language are as described in [_navigations_and_button_rows].

Example 1 Screen in a POS module

<navigation renderingHint="menuBar" id="NavigationBar" name="NavigationBar">
   <item id="File" name="File">
      <item id="_5" commandid="2" name="OK" default="true">
         <appearance fillStrategy="none" ...></appearance>
      </item>
      <item id="_7" commandid="8" name="Cancel">
         <appearance fillStrategy="none" ...></appearance>
      </item>
      <item id="_9" commandid="3" name="Back">
         <appearance fillStrategy="none" ...></appearance>
      </item>
      <item id="_11" commandid="6" name="Save">
         <appearance fillStrategy="none" ...></appearance>
      </item>
   </item>
   <item id="Navigation" name="Navigation">
      <item id="_14" name="Occupation/Residence Mister Y"></item>
      <item id="_15" name="Beneficiary/Account Holder"></item>
      <item id="_16" name="General Questions Mister Y"></item>
      <item id="_17" name="Health Questions Mister Y"></item>
      <item id="_18" name="Smoking in the past Mister Y"></item>
      <item id="_19" name="Foreign travel in the past Mister Y"></item>
      <item id="_20" name="Foreign travel in the future Mister Y">
         <item id="_20" name="Foreign travel in the future Mister Y"></item>
         <item isSeparator="true" id="_x_20"
            name="Foreign travel in the future Mister Y">
         </item>
         <item id="_21" name="Duration/reason Peru"></item>
         <item id="_22" name="Duties Peru"></item>
      </item>
      <item id="_23" name="Disorder CI Mister Y"></item>
   </item>
   <item id="Language" name="Language">
      <item id="_12" name="Polish"></item>
      <item id="_13" name="English" default="true"></item>
   </item>
</navigation>

<buttonRow name="buttonRow" id="buttonRow">
   <button id="_0" name="OK" commandid="2" default="true">
      <position relYPosition="1" relXPosition="4"></position>
      <appearance fillStrategy="none" ...></appearance>
   </button>
   <button id="_1" name="Cancel" commandid="8">
      <position relYPosition="1" relXPosition="3"></position>
      <appearance fillStrategy="none" ...></appearance>
   </button>
   <button id="_2" name="Back" commandid="3">
      <position relYPosition="1" relXPosition="2"></position>
      <appearance fillStrategy="none" ...></appearance>
   </button>
   <button id="_3" name="Save" commandid="6">
      <position relYPosition="1" relXPosition="1"></position>
      <appearance fillStrategy="none" ...></appearance>
   </button>
</buttonRow>
image 2021 10 08 14 31 43 815

Example 2 Screen in the SourceType

<navigation renderingHint="menuBar" id="NavigationBar" name="NavigationBar">
   <item id="File" name="File">
      <item id="_5" commandid="2" name="OK" default="true">
         <appearance fillStrategy="none" ...></appearance>
      </item>
      <item id="_7" commandid="8" name="Cancel">
         <appearance fillStrategy="none" ...></appearance>
      </item>
      <item id="_9" commandid="3" name="Back">
         <appearance fillStrategy="none" ...></appearance>
      </item>
      <item id="_11" commandid="6" name="Save">
         <appearance fillStrategy="none" ...></appearance>
      </item>
   </item>
   <item id="Navigation" name="Navigation">
      <item id="_14" name="Occupation/Residence Mister Z"></item>
      <item id="_15" name="Beneficiary/Account Holder"></item>
      <item id="_16" name="General Questions Mister Z"></item>
      <item id="_17" name="Health Questions Mister Z"></item>
      <item id="_18" name="Smoking in the past Mister Z"></item>
      <item id="_19" name="Foreign travel in the past Mister Z"></item>
      <item id="_20" name="Foreign travel in the future Mister Z"></item>
      <item id="_23" name="Disorder CI Mister Z"></item>
   </item>
   <item id="Language" name="Language">
      <item id="_12" name="Polish"></item>
      <item id="_13" name="English" default="true"></item>
   </item>
</navigation>

<buttonRow name="buttonRow" id="buttonRow">
   <button id="_0" name="OK" commandid="2" default="true">
      <position relYPosition="1" relXPosition="4"></position>
      <appearance fillStrategy="none" ...></appearance>
   </button>
   <button id="_1" name="Back" commandid="3">
      <position relYPosition="1" relXPosition="2"></position>
      <appearance fillStrategy="none" ...></appearance>
   </button>
   <button id="_2" name="Save" commandid="6">
      <position relYPosition="1" relXPosition="1"></position>
      <appearance fillStrategy="none" ...></appearance>
   </button>
</buttonRow>
image 2021 10 08 14 33 41 282

buttons at Context Change

At a context change additional buttons exist to allow the user to add, delete or edit entries. Like the items of a navigation these buttons have a fixed semantic. They are all grouped in a group called relationButtons. The buttons are:

  • New - Add new entry (only available if the maximum number of entries is not reached)

  • Delete - Delete selected entry (only available if an entry can be deleted)

  • Edit - Edit selected entry (only available if at least one entry exists)

Please note that there can exist more than one context change on one screen.

Example

<group name="Relationbuttons" id="8381">
   <layout>
      <position relYPosition="2" relXPosition="2"></position>
      <appearance fillStrategy="none" ...></appearance>
   </layout>
   <button id="_3" name="New" commandid="101">
      <position relYPosition="1" relXPosition="1"></position>
      <appearance fillStrategy="none" ...></appearance>
   </button>
   <button id="_4" name="Edit" commandid="102">
      <position relYPosition="2" relXPosition="1"></position>
      <appearance fillStrategy="none" ...></appearance>
   </button>
   <button id="_5" name="Delete" commandid="103">
      <position relYPosition="3" relXPosition="1"></position>
      <appearance fillStrategy="none" ...></appearance>
   </button>
</group>
image 2021 10 08 14 38 19 773

The buttonRow on a Search-Screen has three different buttons:

  • Cancel - The original term that started the search will be accepted by COMPASS, even though it has no direct match within COMPASS

  • Search - again A new search with the term in the input field is started

  • OK - The selected term of the list is accepted

The navigation-element only exists on this screen when the system is running in Multilanguage mode. The only menu item is then Language, which allows changing the language of the Search screen and the search engine.

Example with Multilanguage option

<buttonRow name="buttonRow" id="buttonRow">
   <button id="_0" name="Cancel" commandid="203">
      <position relYPosition="1" relXPosition="1"></position>
      <appearance fillStrategy="none" ...></appearance>
   </button>
   <button id="_1" name="Search again" commandid="201">
      <position relYPosition="1" relXPosition="2"></position>
      <appearance fillStrategy="none" ...></appearance>
   </button>
   <button id="_2" name="OK" commandid="202">
      <position relYPosition="1" relXPosition="3"></position>
      <appearance fillStrategy="none" ...></appearance>
   </button>
</buttonRow>

<navigation renderingHint="menuBar" id="NavigationBar" name="NavigationBar">
   <item id="Language" name="Language">
      <item id="_3" name="Polish"></item>
      <item id="_4" name="English" default="true"></item>
   </item>
</navigation>
bild14

Examples for Visualization in COMPASS

This chapter contains some typical screens with their screen description screen. For each example screen the screen, as visualised by the COMPASS Screen Builder client, is also shown.

It is possible to see the screen description for every screen displayed by the COMPASS Screen Builder client. For this it is necessary to start the COMPASS server in graphical mode, then start the COMPASS Screen Builder client, and navigate to the desired screen. The response panel of the Server window contains the current screen description screen:

bild15

It is possible to click into the response window, to select all (CTRL+A), copy (CTRL+C), and paste the contents into the editor of your choice, where the screen can then be analysed.

Typical Screen of the Risk-Data

image 2021 10 11 18 45 45 692

The COMPASS Server describes this screen in the following way:

<screen id="_11" title="Occupation/Residence gfdgfd">
   <navigation renderingHint="menuBar" id="NavigationBar" name="NavigationBar">
      <item id="File" name="File">
         <item id="_4" commandid="2" name="OK" default="true">
            <appearance fillStrategy="none" disabled="false" border="false"
               alignment="northwest" foregroundColor="0" toolTip="">
            </appearance>
         </item>
         <item id="_6" commandid="8" name="Cancel">
            <appearance fillStrategy="none" disabled="false" border="false"
               alignment="northwest" foregroundColor="0" toolTip="">
            </appearance>
         </item>
         <item id="_8" commandid="6" name="Save">
            <appearance fillStrategy="none" disabled="false" border="false"
               alignment="northwest" foregroundColor="0" toolTip="">
            </appearance>
         </item>
      </item>
      <item id="Navigation" name="Navigation">
         <item id="_11" name="Occupation/Residence Mister X"></item>
         <item id="_12" name="Beneficiary/Account Holder"></item>
         <item id="_13" name="General Questions Mister X"></item>
         <item id="_14" name="Health Questions Mister X"></item>
         <item id="_15" name="Drinking"></item>
         <item id="_16" name="Smoking"></item>
         <item id="_17" name="Disorder Selection Mister X"></item>
         <item id="_19" name="Disorder CI Mister X"></item>
         <item id="_20" name="Further details/information/documents"></item>
      </item>
      <item id="Language" name="Language">
         <item id="_9" name="Polish"></item>
         <item id="_10" name="English" default="true"></item>
      </item>
   </navigation>
   <buttonRow name="buttonRow" id="buttonRow">
      <button id="_0" name="OK" commandid="2" default="true">
         <position relYPosition="1" relXPosition="4"></position>
         <appearance fillStrategy="none" disabled="false" border="false"
            alignment="northwest" foregroundColor="0" toolTip="">
         </appearance>
      </button>
      <button id="_1" name="Cancel" commandid="8">
         <position relYPosition="1" relXPosition="3"></position>
         <appearance fillStrategy="none" disabled="false" border="false"
            alignment="northwest" foregroundColor="0" toolTip="">
         </appearance>
      </button>
      <button id="_2" name="Save" commandid="6">
         <position relYPosition="1" relXPosition="1"></position>
         <appearance fillStrategy="none" disabled="false" border="false"
            alignment="northwest" foregroundColor="0" toolTip="">
         </appearance>
      </button>
   </buttonRow>
   <group name="Main group" id="2993">
      <layout>
         <position relYPosition="1" relXPosition="1"></position>
         <appearance disabled="false" alignment="northwest" border="false" fontsize="12"
            font="Arial Unicode MS" fontstyle="bold" foregroundColor="0"
            fillStrategy="horizontal" toolTip="">
         </appearance>
      </layout>
      <group name="Occupational details" id="233">
         <layout>
            <dimension height="2" width="2"></dimension>
            <position relYPosition="1" relXPosition="1"></position>
            <appearance fillStrategy="horizontal" disabled="false" border="true"
               alignment="northwest" foregroundColor="0" toolTip="">
            </appearance>
         </layout>
         <group name="Inputgroup" id="3002">
            <layout>
               <position relYPosition="1" relXPosition="1"></position>
               <appearance fillStrategy="horizontal" disabled="false" border="false"
                  alignment="northwest" foregroundColor="0" toolTip="">
               </appearance>
            </layout>
            <question name="Occupation" id="_8">
               <layout>
                  <position relYPosition="1" relXPosition="2"></position>
                  <appearance alignment="northwest" backgroundColor="16777215"
                     disabled="false" border="false" foregroundColor="0" toolTip=""
                     fillStrategy="none">
                  </appearance>
               </layout>
               <textInput id="209" rows="1" editable="true" columns="40" error="false">
                  <position relYPosition="1" relXPosition="2"></position>
                  <appearance alignment="northwest" backgroundColor="16777215"
                     disabled="false" border="false" foregroundColor="0" toolTip=""
                     fillStrategy="none">
                  </appearance>
                  <value id="252" value="Baker"></value>
               </textInput>
            </question>
            <text id="2211" text="Please state your occupation:" optimizeWidth="true"
               error="false">
               <position relYPosition="1" relXPosition="1"></position>
               <appearance alignment="west" backgroundColor="16777215" disabled="false"
                  border="false" foregroundColor="128" toolTip="" fillStrategy="none">
               </appearance>
            </text>
         </group>
      </group>
      <group name="Residence/Nationality" id="3008">
         <layout>
            <position relYPosition="2" relXPosition="1"></position>
            <appearance fillStrategy="horizontal" disabled="false" border="true"
               alignment="northwest" foregroundColor="0" toolTip="">
            </appearance>
         </layout>
         <text id="2224" text="Where do you reside?" optimizeWidth="true" error="false">
            <position relYPosition="1" relXPosition="1"></position>
            <appearance alignment="west" backgroundColor="16777215" disabled="false"
               border="false" foregroundColor="128" toolTip="" fillStrategy="none">
            </appearance>
         </text>
         <question name="Residence" id="_11">
            <layout>
               <position relYPosition="1" relXPosition="2"></position>
               <appearance alignment="northwest" backgroundColor="16777215"
                  disabled="false" border="false" foregroundColor="0" toolTip=""
                  fillStrategy="none">
               </appearance>
            </layout>
            <textInput id="176" rows="1" editable="true" columns="40" error="false">
               <position relYPosition="1" relXPosition="2"></position>
               <appearance alignment="northwest" backgroundColor="16777215"
                  disabled="false" border="false" foregroundColor="0" toolTip=""
                  fillStrategy="none">
               </appearance>
               <value id="254" value="United Kingdom"></value>
            </textInput>
         </question>
         <text id="2244" text="What is your nationality?" optimizeWidth="true"
            error="false">
            <position relYPosition="3" relXPosition="1"></position>
            <appearance alignment="west" backgroundColor="16777215" disabled="false"
               border="false" foregroundColor="128" toolTip="" fillStrategy="none">
            </appearance>
         </text>
         <question name="Nationality" id="_12">
            <layout>
               <position relYPosition="3" relXPosition="2"></position>
               <appearance alignment="northwest" backgroundColor="16777215"
                  disabled="false" border="false" foregroundColor="0" toolTip=""
                  fillStrategy="none">
               </appearance>
            </layout>
            <textInput id="61" rows="1" editable="true" columns="40" error="false">
               <position relYPosition="3" relXPosition="2"></position>
               <appearance alignment="northwest" backgroundColor="16777215"
                  disabled="false" border="false" foregroundColor="0" toolTip=""
                  fillStrategy="none">
               </appearance>
               <value id="256" value="United Kingdom"></value>
            </textInput>
         </question>
      </group>
   </group>
</screen>

Screen Displaying a Context Change

This example contains the screen where disorders can be added, but also deleted. Therefore there are 3 additional buttons: New, Edit and Delete.

image 2021 10 11 18 49 03 766

Most screens can also be visualised in a non-graphical environment. Here we It is possible to transform such screens to a char based environment, but it is necessary to restrict the number of possible input.

bild16

Please note that the 3 additional buttons for input control of the disorders have not been transformed. The user can fill in a fixed number of disorders instead of an arbitrary number – in this example the number of disorders is restricted to 11.

The user actions OK, Back etc. are implemented using function keys instead of buttons. The assignment of keys (buttons) is displayed in row 25.

Row 24 is typically reserved for error messages or hints. The first row contains the screen title; the second row can contain a navigation-element.

The COMPASS Server describes this screen in the following way:

<screen id="_23" title="Disorder Selection Mister X">
   <navigation renderingHint="menuBar" id="NavigationBar" name="NavigationBar">
      <item id="File" name="File">
         <item id="_8" commandid="2" name="OK" default="true">
            <appearance fillStrategy="none" ...></appearance>
         </item>
         <item id="_10" commandid="8" name="Cancel">
            <appearance fillStrategy="none" ...></appearance>
         </item>
         <item id="_12" commandid="3" name="Back">
            <appearance fillStrategy="none" ...></appearance>
         </item>
         <item id="_14" commandid="6" name="Save">
            <appearance fillStrategy="none" ...></appearance>
         </item>
      </item>
      <item id="Navigation" name="Navigation">
         <item id="_17" name="Occupation/Residence Mister X"></item>
         <item id="_18" name="Beneficiary/Account Mister X"></item>
         <item id="_19" name="General Questions Mister X"></item>
         <item id="_20" name="Health Questions Mister X"></item>
         <item id="_21" name="Drinking"></item>
         <item id="_22" name="Smoking"></item>
         <item id="_23" name="Disorder Selection Mister X">
            <item id="_23" name="Disorder Selection Mister X"></item>
            <item isSeparator="true" id="_x_23" name="Disorder Selection Mister X"></item>
            <item id="_24" name="Details Disorder cough"></item>
         </item>
         <item id="_25" name="Disorder CI Mister X"></item>
         <item id="_26" name="Further details/information/documents"></item>
      </item>
      <item id="Language" name="Language">
         <item id="_15" name="Polish"></item>
         <item id="_16" name="English" default="true"></item>
      </item>
   </navigation>
   <buttonRow name="buttonRow" id="buttonRow">
      <button id="_0" name="OK" commandid="2" default="true">
         <position relYPosition="1" relXPosition="4"></position>
         <appearance fillStrategy="none" ...></appearance>
      </button>
      <button id="_1" name="Cancel" commandid="8">
         <position relYPosition="1" relXPosition="3"></position>
         <appearance fillStrategy="none" ...></appearance>
      </button>
      <button id="_2" name="Back" commandid="3">
         <position relYPosition="1" relXPosition="2"></position>
         <appearance fillStrategy="none" ...></appearance>
      </button>
      <button id="_3" name="Save" commandid="6">
         <position relYPosition="1" relXPosition="1"></position>
         <appearance fillStrategy="none" ...></appearance>
      </button>
   </buttonRow>
   <group name="Please specify Disorders/Treatments:" id="2957">
      <layout>
         <position relYPosition="1" relXPosition="1"></position>
         <appearance disabled="false" alignment="northwest" … ></appearance>
      </layout>
      <group name="AP has disorder" id="227">
         <layout>
            <dimension height="2" width="2"></dimension>
            <position relYPosition="1" relXPosition="1"></position>
            <appearance fillStrategy="both" ...></appearance>
         </layout>
         <group name="List Group" id="2968">
            <layout>
               <position relYPosition="2" relXPosition="1"></position>
               <appearance fillStrategy="both" ...></appearance>
            </layout>
            <question id="_71">
               <layout>
                  <position relYPosition="1" relXPosition="1"></position>
                  <appearance alignment="northwest" … ></appearance>
               </layout>
               <selection id="_227" noRows="5" renderingHint="List" multiple="true"
                  editable="true" noColumns="1">
                  <position relYPosition="1" relXPosition="1"></position>
                  <appearance alignment="northwest" … ></appearance>
                  <value id="Disorder cough_7" value="Disorder cough"></value>
               </selection>
            </question>
         </group>
         <group name="Relationbuttons" id="2921">
            <layout>
               <position relYPosition="2" relXPosition="2"></position>
               <appearance fillStrategy="none" … ></appearance>
            </layout>
            <button id="_4" name="New" commandid="101">
               <position relYPosition="1" relXPosition="1"></position>
               <appearance fillStrategy="none" ...></appearance>
            </button>
            <button id="_5" name="Edit" commandid="102">
               <position relYPosition="2" relXPosition="1"></position>
               <appearance fillStrategy="none" ...></appearance>
            </button>
            <button id="_6" name="Delete" commandid="103">
               <position relYPosition="3" relXPosition="1"></position>
               <appearance fillStrategy="none" ...></appearance>
            </button>
         </group>
         <group name="Inputgroup" id="2982">
            <layout>
               <position relYPosition="1" relXPosition="1"></position>
               <appearance fillStrategy="horizontal" ...></appearance>
            </layout>
            <question name="Text-input disorder" id="_72">
               <layout>
                  <position relYPosition="1" relXPosition="1"></position>
                  <appearance alignment="northwest" … ></appearance>
               </layout>
               <textInput id="115" rows="1" editable="true" columns="25" error="false">
                  <position relYPosition="1" relXPosition="1"></position>
                  <appearance alignment="northwest" … ></appearance>
                  <value id="287" value=""></value>
               </textInput>
            </question>
         </group>
      </group>
   </group>
</screen>

A Message Screen

When COMPASS describes a message screen, it includes it in the current screen. The COMPASS Screen Builder client redraws the current screen, and puts the message screen on top of it. The description of the message screen is included at the end of the screen object.

image 2021 10 11 19 01 09 490

Clicking Cancel leads to:

image 2021 10 11 19 02 00 242

The COMPASS Server describes the second screen in the following way:

<screen id="_17" title="Smoking in the past hjhjk">
   <navigation renderingHint="menuBar" id="NavigationBar" name="NavigationBar">
      <item id="File" name="File">
         <item id="_4" commandid="2" name="OK" default="true">
            <appearance fillStrategy="none" … ></appearance>
         </item>
         <item id="_6" commandid="8" name="Cancel">
            <appearance fillStrategy="none" … ></appearance>
         </item>
         <item id="_8" commandid="3" name="Back">
            <appearance fillStrategy="none" … ></appearance>
         </item>
         <item id="_10" commandid="6" name="Save">
            <appearance fillStrategy="none" … ></appearance>
         </item>
      </item>
      <item id="Navigation" name="Navigation">
         <item id="_13" name="Occupation/Residence hjhjk"></item>
         <item id="_14" name="Beneficiary/Account Holder"></item>
         <item id="_15" name="General Questions hjhjk"></item>
         <item id="_16" name="Health Questions hjhjk"></item>
         <item id="_17" name="Smoking in the past hjhjk"></item>
         <item id="_18" name="Disorder CI hjhjk"></item>
      </item>
      <item id="Language" name="Language">
         <item id="_11" name="Polish"></item>
         <item id="_12" name="English" default="true"></item>
      </item>
   </navigation>
   <buttonRow name="buttonRow" id="buttonRow">
      <button id="_0" name="OK" commandid="2" default="true">
         <position relYPosition="1" relXPosition="4"></position>
         <appearance fillStrategy="none" disabled="false" border="false"
            alignment="northwest" foregroundColor="0" toolTip="">
         </appearance>
      </button>
      <button id="_1" name="Back" commandid="3">
         <position relYPosition="1" relXPosition="2"></position>
         <appearance fillStrategy="none" disabled="false" border="false"
            alignment="northwest" foregroundColor="0" toolTip="">
         </appearance>
      </button>
      <button id="_2" name="Save" commandid="6">
         <position relYPosition="1" relXPosition="1"></position>
         <appearance fillStrategy="none" disabled="false" border="false"
            alignment="northwest" foregroundColor="0" toolTip="">
         </appearance>
      </button>
   </buttonRow>
   <group name="UI-Main Group" id="9640">
      <layout>
         <position relYPosition="1" relXPosition="1"></position>
         <appearance disabled="false" alignment="northwest" border="false" fontsize="12"
            font="Arial Unicode MS" fontstyle="bold" foregroundColor="0"
            fillStrategy="both" toolTip="">
         </appearance>
      </layout>
      <text id="2697" text="Did you ever smoke?" optimizeWidth="false" error="false">
         <position relYPosition="1" relXPosition="1"></position>
         <appearance alignment="west" backgroundColor="0" disabled="false" border="false"
            foregroundColor="3342489" toolTip="" fillStrategy="none">
         </appearance>
      </text>
      <question name="ever_smoked (y/n)" id="_59">
         <layout>
            <position relYPosition="1" relXPosition="2"></position>
            <appearance fillStrategy="none" disabled="false" border="false"
               alignment="west" foregroundColor="0" toolTip="">
            </appearance>
         </layout>
         <selection id="55" name="ever_smoked (y/n)" error="false" noColumns="0"
               editable="true" noRows="1" renderingHint="RadioButton">
            <position relYPosition="1" relXPosition="2"></position>
            <appearance fillStrategy="none" disabled="false" border="false"
               alignment="west" foregroundColor="0" toolTip="">
            </appearance>
            <value selected="true" id="0" value="No"></value>
            <value id="1" value="Yes"></value>
         </selection>
      </question>
   </group>
   <message type="info" buttons="confirm" text="Do you really want to quit?"></message>
</screen>

The Search Screen

COMPASS has a powerful search engine that works for disorders, occupations, drugs, etc. When an input cannot be matched to an existing disorder, occupation, drugs, etc, the search screen will come up possible suggestions. This screen is defined internally, and cannot be modified via the maintenance.

image 2021 10 11 19 05 34 347

The COMPASS Server describes this screen in the following way:

<screen id="_" title="Search">
   <buttonRow name="buttonRow" id="buttonRow">
      <button id="_0" name="Cancel" commandid="203">
         <position relYPosition="1" relXPosition="1"></position>
         <appearance fillStrategy="none" disabled="false" border="false"
            alignment="center" foregroundColor="0" toolTip="">
         </appearance>
      </button>
      <button id="_1" name="Search again" commandid="201">
         <position relYPosition="1" relXPosition="2"></position>
         <appearance fillStrategy="none" disabled="false" border="false"
            alignment="center" foregroundColor="0" toolTip="">
         </appearance>
      </button>
      <button id="_2" name="OK" commandid="202">
         <position relYPosition="1" relXPosition="3"></position>
         <appearance fillStrategy="none" disabled="false" border="false"
            alignment="center" foregroundColor="0" toolTip="">
         </appearance>
      </button>
   </buttonRow>
   <group name="Search" id="33">
      <layout>
         <position relYPosition="1" relXPosition="1"></position>
         <appearance disabled="false" alignment="west" border="false" fontsize="12"
            font="Arial Unicode MS" fontstyle="bold" foregroundColor="0"
            fillStrategy="both" toolTip="">
         </appearance>
      </layout>
      <text id="37" text="Search term" optimizeWidth="false" error="false">
         <position relYPosition="1" relXPosition="1"></position>
         <appearance alignment="west" backgroundColor="16777215" disabled="false"
            border="false" foregroundColor="128" toolTip="" fillStrategy="vertical">
         </appearance>
      </text>
      <question name="Search term" id="10">
         <layout>
            <position relYPosition="2" relXPosition="1"></position>
            <appearance alignment="west" backgroundColor="16777215" disabled="false"
               border="false" foregroundColor="0" toolTip="" fillStrategy="none">
            </appearance>
         </layout>
         <textInput id="10" rows="1" editable="true" columns="60" error="false">
            <position relYPosition="2" relXPosition="1"></position>
            <appearance alignment="west" backgroundColor="16777215" disabled="false"
               border="false" foregroundColor="0" toolTip="" fillStrategy="none">
            </appearance>
            <value id="10" value="ll trichominiasis"></value>
         </textInput>
      </question>
      <text id="38" text="Selection" optimizeWidth="false" error="false">
         <position relYPosition="3" relXPosition="1"></position>
         <appearance alignment="west" backgroundColor="16777215" disabled="false"
            border="false" foregroundColor="128" toolTip="" fillStrategy="vertical">
         </appearance>
      </text>
      <question name="Search List" id="15">
         <layout>
            <position relYPosition="4" relXPosition="1"></position>
            <appearance alignment="west" backgroundColor="16777215" disabled="false"
               border="false" foregroundColor="0" toolTip="" fillStrategy="none">
            </appearance>
         </layout>
         <selection id="15" name="Search List" error="false" noColumns="1" editable="true"
               noRows="20" renderingHint="List">
            <position relYPosition="4" relXPosition="1"></position>
            <appearance alignment="west" backgroundColor="16777215" disabled="false"
               border="false" foregroundColor="0" toolTip="" fillStrategy="none">
            </appearance>
            <value selected="true" id="1547" value="intestinal trichomoniasis"
               keyString="M14.3-001">
            </value>
            <value id="2021" value="trichomoniasis" keyString="M14.3-001"></value>
            <value id="2839" value="trichiniasis" keyString="M14.3-002"></value>
            <value id="2869" value="trichostrongyliasis" keyString="M14.3-003"></value>
            <value id="6042" value="trichiasis" keyString="M14.3-004"></value>
            <value id="2857" value="trichuriasis" keyString="M14.3-005"></value>
            <value id="2567" value="trichophytosis" keyString="M14.3-006"></value>
            <value id="2678" value="trichosporosis" keyString="M14.3-007"></value>
            <value id="9571" value="hypertrichiasis" keyString="M14.3-008"></value>
         </selection>
      </question>
   </group>
   <navigation renderingHint="menuBar" id="NavigationBar"
      name="NavigationBar">
      <item id="Language" name="Language">
         <item id="_3" name="Polish"></item>
         <item id="_4" name="English" default="true"></item>
      </item>
   </navigation>
</screen>

Data Model for a Screen Description

The following data model shows the dependency of the elements of the Screen Builder interface.

Please note that the DTD is more restrictive than the data model description. E.g. it is possible to define in the DTD that the elements question, text and button may be repeated in exactly this order in a group. It is also not possible to define that a question has to contain at least one input object.

The relations between the elements are described by cardinalities:

0..1 - contains at most one element
0..n - contains any number of elements
1 - contains exactly one element
1..n - contains at least one element

0001

DTD

DTD for the screen element

The screen element is used by the response element, and is therefore included in the file config\dtd\screen.dtd and referenced by config\dtd\response.dtd.

<!ELEMENT screen (navigation?, buttonRow?, group, message?)>
<!ATTLIST screen
    id		        CDATA #REQUIRED
    fixedID	        CDATA #IMPLIED
	title 		    CDATA ""
	helpID 		    CDATA #IMPLIED
	position 		(northwest | southwest | northeast | southeast | north | south |
                    east | west | center) "center"
	width 		    CDATA "800"
	height 		    CDATA "600"
	respectSize		(true | false) "false"
	resizable 		CDATA "true"
>

<!ELEMENT navigation (item)+>
<!ATTLIST navigation
	id 			    CDATA #REQUIRED
	name 			CDATA ""
	renderingHint 	(buttonRow | menuBar | tree) "menuBar"
>

<!ELEMENT item (appearance?, item*)>
<!ATTLIST item
	id 			    CDATA #REQUIRED
    fixedID		    CDATA #IMPLIED
    caseObj		    CDATA #IMPLIED
	name 			CDATA #REQUIRED
	group			CDATA #IMPLIED
	shown  		    (true | false) #IMPLIED
    consistent 		(true | false | POSCancel) #IMPLIED
    isSeparator 	(true | false) "false"
	default 		(true | false) "false"
	commandid		CDATA #IMPLIED
>

<!ELEMENT appearance EMPTY>
<!ATTLIST appearance
	alignment 		    (north | northwest | northeast | south | west | east | center |
                        southwest | southeast) "west"
	bottom 		        CDATA "2"
	top 			    CDATA "2"
	left 			    CDATA "2"
	right 		        CDATA "2"
	fillStrategy 	    (both | horizontal | vertical | none) "none"
	font 			    CDATA "Arial"
	fontsize 		    CDATA "12"
	fontstyle 		    (italic | bold | plain) "plain"
	backgroundColor 	CDATA "lightGray"
	foregroundColor 	CDATA "lightBlue"
	toolTip 	    	CDATA ""
	icon 			    CDATA "The DefaultIcon URL"
	border 		        (true | false) "false"
	hotKey 		        CDATA #IMPLIED
	disabled 	        (true | false) "false"
	helpID 		        CDATA #IMPLIED
	focus 		        (true | false) "false"
>

<!ELEMENT buttonRow (button, button*)>
<!ATTLIST buttonRow
	id 			CDATA ""
	name 		CDATA ""
>

<!ELEMENT button (position, appearance?)>
<!ATTLIST button
	id 			    CDATA #REQUIRED
	name 			CDATA #REQUIRED
	commandid		CDATA #REQUIRED
	relQuest		CDATA #IMPLIED
	default 		(true | false) "false"
>

<!ELEMENT group (layout, spacing?, (question | text | button | group)*)>
<!ATTLIST group
	id 			CDATA #REQUIRED
	name 		CDATA "This group's default name."
	type 		(group | input | list | addList | relation | relButtons | doctor)
>

<!ELEMENT layout (dimension?, position?, appearance?)>

<!ELEMENT dimension EMPTY>
<!ATTLIST dimension
	width		CDATA "1"
	height		CDATA "1"
>

<!ELEMENT position EMPTY>
<!ATTLIST position
	relXPosition 	CDATA "1"
	relYPosition	CDATA "1"
>

<!ELEMENT spacing EMPTY>
<!ATTLIST spacing
	width 		CDATA "1"
	height		CDATA "1"
>

<!ELEMENT question (layout, (textInput | numberInput | dateInput | timeInput |
    passwordInput | selection))>
<!ATTLIST question
	id 			    CDATA #REQUIRED
    fixedID	        CDATA #IMPLIED
    catyID	        CDATA #IMPLIED
    cotyID	        CDATA #IMPLIED
	name 			CDATA ""
	required 		(true | false) "false"
>

<!ELEMENT textInput (position, appearance?, value?)>
<!ATTLIST textInput
	id 			    CDATA #REQUIRED
	rows 			CDATA "1"
	columns 		CDATA "20"
	editable 		(true | false) "true"
	hasEvent 		(true | false) "false"
	error 		    (true | false) "false"
	mandatory		(true | false) "false"
>

<!ELEMENT value EMPTY>
<!ATTLIST value
	id			    CDATA #REQUIRED
	value			CDATA #REQUIRED
	selected		(true | false) "false"
	icon			CDATA "The DefaultIcon URL"
	row			    CDATA #IMPLIED
	column		    CDATA #IMPLIED
	key			    (true | false) "true"
	keyString		CDATA #IMPLIED
>

<!ELEMENT numberInput (position, appearance?, value?, unit*)>
<!ATTLIST numberInput
	id			    CDATA #REQUIRED
	columns		    CDATA "20"
	editable		(true | false) "true"
	hasEvent		(true | false) "false"
	error			(true | false) "false"
	mandatory		(true | false) "false"
>

<!ELEMENT unit (appearance?)>
<!ATTLIST unit
	id			    CDATA #REQUIRED
	name			CDATA #REQUIRED
>

<!ELEMENT dateInput (position, appearance?, value?, unit*)>
<!ATTLIST dateInput
	id			    CDATA #REQUIRED
	columns		    CDATA "20"
	editable		(true | false) "true"
	hasEvent		(true | false) "false"
	error			(true | false) "false"
	mandatory		(true | false) "false"
	display		    (DMY | MY | Y) "DMY"
>

<!ELEMENT timeInput (position, appearance?, value?)>
<!ATTLIST timeInput
	id			    CDATA #REQUIRED
	editable		(true | false) "true"
	hasEvent		(true | false) "false"
	error			(true | false) "false"
	mandatory		(true | false) "false"
>

<!ELEMENT passwordInput (position, appearance?, value?)>
<!ATTLIST passwordInput
	id			    CDATA #REQUIRED
	format		    CDATA ""
	columns		    CDATA "20"
	editable		(true|false) "true"
	hasEvent		(true|false) "false"
>

<!ELEMENT selection (position, appearance?, value*, heading*)>
<!ATTLIST selection
	id			    CDATA #REQUIRED
	name			CDATA "default selection name"
	renderingHint	(List | EditableComboBox | ComboBox | RadioButton |
                    Vertical_RadioButtons | Horizontal_RadioButtons | Table |
                    User-specific01 | User-specific02 | User-specific03 |
                    User-specific04 | User-specific05 | User-specific06 |
                    User-specific07 | User-specific08 | User-specific09 |
                    User-specific10 | Invisible) "RadioButton"
	shape			(RadioButton | CheckBox) "RadioButton"
	noColumns		CDATA "1"
	noRows		    CDATA "7"
	collected		(true | false) "false"
	multiple		(true | false) "false"
	hasEvent		(true | false) "false"
	editable		(true | false) "false"
	error			(true | false) "false"
	mandatory		(true | false) "false"
>

<!ELEMENT heading EMPTY>
<!ATTLIST heading
	id			    CDATA #REQUIRED
	name			CDATA #REQUIRED
>

<!ELEMENT text (position, appearance?, value?)>
<!ATTLIST text
	id			    CDATA #REQUIRED
	text			CDATA #REQUIRED
	relFixedID		CDATA #IMPLIED
	optimizeWidth	(true | false) "true"
	error			(true | false) "false"
>

<!ELEMENT message EMPTY>
<!ATTLIST message
	text		    CDATA #REQUIRED
	type		    (info | error) "info"
	buttons		    (message | confirm | yesNoCancel) "message"
>

DTD for the userAction element

The userAction element is used by the request element, and its DTD is included in the file config\dtd\request.dtd.

<!ELEMENT userAction (answer)*>
<!ATTLIST userAction
    screenID        CDATA  #REQUIRED
    screenCommand   CDATA  #REQUIRED
>

<!ELEMENT answer (value)*>
<!ATTLIST answer
    question    CDATA  #REQUIRED
>

<!ELEMENT value EMPTY>
<!ATTLIST value
    id      CDATA  #IMPLIED
    value   CDATA  #IMPLIED
    unit    CDATA  #IMPLIED
>